C-字符推送和弹出操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C-字符推送和弹出操作相关的知识,希望对你有一定的参考价值。
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
。为了检查它是否有效,我打印出来但是我遇到了运行时错误。如何存储元素以及如何将其打印出来?
答案
我已经复制并粘贴了你的代码,但它没有被编译。我认为你要么不发布你的实际代码,也不打算编译和阅读编译器警告。帮助你很难。这里注意到一些事情:
1. create
必须返回指向Stack
的指针,而不是对象。
Stack *create(int c)
{
Stack *S = malloc(sizeof *S);
S->size=c;
S->top=-1;
S->array = malloc(c);
return S;
}
2.同样适用于makeEmpty
Stack *makeEmpty(void)
{
Stack *S1=create(100);
S1->top=-1;
return S1;
}
3. pop
应该得到一个指向Stack
的指针,而不是对象
char pop(Stack *S)
{
return S->array[S->top--];
};
在这里你应该检查堆栈中是否有元素。 int pop(Stack *S, char *val)
返回1并在成功时写入*val
,然后返回0否则会更好。
从你的pop
判断,你只推动char
。我不知道你想用strcat
做什么。无论哪种方式,你正在做strcat
错误。您正在声明一个包含100个空格的堆栈,但您只为result
声明了30个空格。如果你的堆栈中有超过31个元素怎么办?我知道你只是在检查2个元素,但很容易忽略它并扩展它以完成所有堆栈而不改变result
的内存要求。
strcat
也是一个与C-Strings一起使用的函数,这意味着它需要C-Strings。 C-String必须是