我正在尝试将堆栈转换为字符串。我的功能是
int StackToString(const struct Stack *stack, char *result, int resultSize);
我希望我的堆栈看起来像
如果结果中有足够的空格,那么字符串应该存储在那里,我想以“1”值返回。如果没有(由resultSize指定),则返回0,结果未定义。
到目前为止,这是我写的:
int StackToString(const struct Stack *stack, char *result, int resultSize){
int i;
char str[20];
sprintf(str, "stack[0x%x]:\n", stack);
strcat(result, str);
for(i=0; i<stack->currentItemIndex;i++){
???
}
}
有人可以就我接下来应该做什么提出任何建议吗?我想我需要用一些东西进行冲刺,并将堆栈中的剩余元素与结果进行比较并在某些情况下返回,但我不确定如何实现它....
答案 0 :(得分:1)
如果您可以使用snprintf()
而不是sprintf()
,则可以删除中间缓冲区和额外复制。这也可以保证您的结果缓冲区不会被覆盖。
int StackToString(const struct Stack *stack, char *result, int resultSize) {
int i;
int n;
n = snprintf(result, resultSize, "stack[0x%x]:\n", stack);
if (n < 0 || n >= resultSize)
return 0;
result += n;
resultSize -= n;
for (i = 0; i < stack->currentItemIndex; i++) {
n = snprintf(result, resultSize, "%d: 0x%x\n", i, stack->items[i]);
if (n < 0 || n >= resultSize)
return 0;
result += n;
resultSize -= n;
}
return 1;
}