单链表检索错误的C程序
我试图找出下面代码的问题。在这里,我试图创建一个字符串链表,按字母顺序对字符串进行排序,但在编译时(在Ubuntu上),它显示了一个错误单链表检索错误的C程序,c,sorting,malloc,C,Sorting,Malloc,我试图找出下面代码的问题。在这里,我试图创建一个字符串链表,按字母顺序对字符串进行排序,但在编译时(在Ubuntu上),它显示了一个错误 #include<stdio.h> #include<stdlib.h> #include<string.h> struct node_type { char data[21]; struct node_type *next; }; typedef struct node_type list;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node_type {
char data[21];
struct node_type *next;
};
typedef struct node_type list;
void showList ();
list *sortInsert();
list *createNode();
list *find();
main()
{
list *newnode, *start = NULL;
char c = 'y';
char word[21];
while(c != 'n' && c!= 'N')
{
printf("\n Enter the word:");
scanf("%s", word); fflush(stdin);
newnode = createNode();
strcpy(newnode->data, word);
newnode->next = NULL;
if(!find(start,newnode->data))
start = sortInsert(start,newnode);
printf("\nThe list so far:");
showList(start);
printf("\n\n");
printf("\n Do you want to add new data to the list? (y/n): ");
scanf("%c", &c); getchar(); fflush(stdin);
}
printf("\nThe sorted list is:"); showList(start); printf("\n\n");
}
list *createNode()
{
list *new;
new = (list *)malloc(sizeof(list));
return(new);
}
list *sortInsert(list *start, list *newnode)
{
list *prev, *curr;
if(start==NULL)
{
return(newnode);
}
curr = start;
prev=curr;
if(strcmp(newnode->data, curr->data)<0)
{
start=newnode;
newnode->next = curr;
return(start);
}
while(curr!=NULL)
{
curr = curr->next;
if(curr==NULL)
{
prev->next = newnode;
newnode->next = curr;
return(start);
}
else
{
if(strcmp(newnode->data, curr->data)<0)
{
prev->next = newnode;
newnode->next = curr;
return(start);
}
prev = prev->next;
}
}
return(start);
}
list *find(list *st, int dt)
{
while(st)
if(strcmp(st->data,dt) == 0)
return (st);
else
st = st->next;
return(st);
}
void showList(list *temp)
{
while(temp)
{
printf("%s", temp->data);
temp = temp->next;
}
printf("\n");
}
请告诉我解决方案。问题:
如果strcmpst->data,dt==NULL,这里dt是整型变量
strcmp需要const char*作为i/p参数。检查手册页
解决方案:
在您的代码中,您正在调用find as
newnode->data属于char类型,因此,find的函数签名存在问题。将查找函数更改为
list *find(list *st, const char * dt)
请将code.list*findlist*st,int dt->list*findlist*st,const char*dt将函数列表的参数列表*findlist*st,int dt缩进list*findlist*st,const char*dt,因为您传递的数据是char*类型的,并且strcmp需要const char*作为输入参数。hi,这个bug被分类了,现在我面临另一个问题,循环没有结束?有什么建议吗
find(start,newnode->data)
list *find(list *st, const char * dt)