【发布时间】:2018-06-12 16:31:06
【问题描述】:
Stack create(int c)
{
Stack S=(Stack)malloc(sizeof(struct stack));
S->size=c;
S->top=-1;
S->array=(char *)malloc(sizeof(char)*c);
return S;
}
Stack makeEmpty(void)
{
Stack *S1=create(100);
S1[0]->top=-1;
return S1;
}
char pop(Stack S)
{
return S->array[S->top--];
};
int main(void)
{
Stack *S1;
S1=makeEmpty();
int j;
int k=0;
char result[30];
for(j=0; j<2; j++)
{
char result1=pop(S1);
strcat(result, result1);
k++;
}
}
我跳过了一些部分,比如typedef struct stack Stack;
我想做的是在 for 循环工作时从堆栈中弹出元素。然后,将这些元素存储在一个新数组result 中。为了检查它是否有效,我打印出来但我遇到了运行时错误。如何存储元素以及如何打印出来?
【问题讨论】:
-
欢迎来到 Stack Overflow。请尽快阅读About 和How to Ask 页面,但更迫切地关注如何创建 MCVE (minimal reproducible example)。 “我有一个运行时错误”是对出错原因的骇人听闻的解释。到底发生了什么,你输入了什么?您显示的代码没有定义结构类型,也没有显示如何推送数据。大多数情况下,您应该预先递减堆栈指针,但这取决于...问题很可能出在您未显示的代码中,就像您显示的代码中一样。
-
我不明白你在问什么。此外,
strcat的签名是char *strcat(char *dest, const char *src);。你传递了一个char,你的编译器一定警告过你。 -
您的
pop()函数如何告诉您没有要弹出的字符?你还没有展示事情是如何被推送的,但我确实看到你在top中有一个空堆栈的-1,所以S->top--不一定是错误的。 -
在
makeEmpty你有一个语法错误,S1[0]->top=-1;是错误的,应该是S1[0].top=-1;。你在发布之前编译你的东西吗?你读过编译器错误吗?此外,这样做毫无意义,create调用已经将-1分配给top。 -
两个都试了,但是 S1[0].top=-1 编译出错了。