【发布时间】:2015-08-20 06:12:59
【问题描述】:
朋友们好,这是我第一次发帖,我发帖时可能做错了什么,抱歉。
我正在尝试使用堆栈以相反的顺序打印字符串。我试图将最高值放入字符数组的地方我在该部分遇到错误,请帮忙。
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
struct StackNode
{
char data;
struct StackNode* next;
};
struct StackNode* createNode(char data){
struct StackNode* stack=(struct StackNode*)malloc(sizeof(struct StackNode));
stack->data=data;
stack->next=NULL;
return stack;
}
void push(struct StackNode** root,char data)
{
struct StackNode* stack=createNode(data);
stack->next=*root;
*root=stack;
}
char top(struct StackNode** root)
{
return (*root)->data;
}
void pop(struct StackNode** root, char c[],int k)
{
int i;
for(i=0;i<=k;i++)
{
c[i]=top(&root);
*root=(*root)->next;
}
}
void print(struct StackNode* root)
{
while(root!=NULL)
{
printf("%c",root->data);
root=root->next;
printf(" ");
}
printf("\n");
}
int main()
{
struct StackNode* root=NULL;
char c[]="Sherry";
int k=strlen(c);
int i;
for(i=0;i<=k;i++)
{
push(&root,c[i]);
}
pop(&root,c,k);
for(i=0;i<=k;i++)
{
printf("%c",c[i]);
printf(" ");
}
return 0;
}
stackreviseLinkedList.c: In function ‘pop’:
stackreviseLinkedList.c:36:1: warning: passing argument 1 of ‘top’ from incompatible pointer type [enabled by default]
c[i]=top(&root);
^
stackreviseLinkedList.c:26:6: note: expected ‘struct StackNode **’ but argument is of type ‘struct StackNode ***’
char top(struct StackNode** root)
【问题讨论】:
-
可能是
c[i]=top(&root);导致错误?您可能需要删除 & 运算符。如c[i]=top(root);? -
请更正缩进并说明错误所在行
-
@Giorgi 他也应该只进行迭代,直到他到达堆栈的底部。
-
分段错误发生在您最后的
printf:当root为NULL时,您尝试打印top(&root)。您应该实施一些方法来检测堆栈下溢。 -
请格式化您的代码。
标签: c data-structures struct compiler-errors