【问题标题】:Converting a stack to a string将堆栈转换为字符串
【发布时间】:2013-05-09 05:49:19
【问题描述】:

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

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

我希望我的堆栈看起来像

  • 堆栈[STACK_MEMORY_ADDRESS]:
  • ELEMENT_NUMBER:数据 ...
  • ELEMENT_NUMBER:数据

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

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

【问题讨论】:

  • sprintf 进入 str 和 strcat 结果,正如你已经在做的那样,只是在一个循环中?这听起来是正确的想法。
  • 你在stack中保存了什么样的数据?
  • 你可以销毁堆栈吗?堆栈是否提供对内部元素的访问?如果没有,您可能需要从一个堆栈中弹出项目,将它们转换为字符串,然后将项目推入另一个堆栈。当原始堆栈为空时,您可以重新加载从第二个堆栈弹出的项目 - 排序正常。

标签: c string pointers stack


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2015-04-22
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多