单链表检索错误的C程序

单链表检索错误的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;

我试图找出下面代码的问题。在这里,我试图创建一个字符串链表,按字母顺序对字符串进行排序,但在编译时(在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;

   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)