将堆栈转换为字符串

时间:2013-05-09 05:49:20

标签: c string pointers stack

我正在尝试将堆栈转换为字符串。我的功能是

int StackToString(const struct Stack *stack, char *result, int resultSize);

我希望我的堆栈看起来像

  • 堆叠[STACK_MEMORY_ADDRESS]:
  • 将Element_number:DATA ...
  • 将Element_number:DATA

如果结果中有足够的空格,那么字符串应该存储在那里,我想以“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++){
    ???
}
}

有人可以就我接下来应该做什么提出任何建议吗?我想我需要用一些东西进行冲刺,并将堆栈中的剩余元素与结果进行比较并在某些情况下返回,但我不确定如何实现它....

1 个答案:

答案 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;
}