编译此代码时出错

时间:2016-04-29 06:52:47

标签: c

我正在编写代码来创建正确的链接列表。请告诉我们此计划中的错误errors while compiling

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    typedef void* cadtpointer;
    struct cadtlist 
    {
      cadtpointer data;
      struct cadtlist* next;
     }; /* structure*/

     struct cadtlist* cadt_list_init( )
     {
        struct cadtlist * temp, * head,* list;
        int num;
        char *p, s[100];
        printf(" enter the number of nodes to be created");
        while (fgets(s, sizeof(s), stdin)) 
        {
          num = strtol(s, &p, 10);
          if (p == s || *p != '\n') 
            {
                printf("Please enter an integer: ");
            }
          else break;
        } 
        while (num != 0)
        {
         if(NULL != list )
         {
           list->next = cadt_create_list(temp);
            }
         else
        {
          list = cadt_create_list(temp);
          head = list;
        }
        num--;
      }


    }
   struct cadtlist* cadt_create_list(struct cadtlist * list)
   {
    int n;
    char * data;
    struct cadtlist * newnode;
    newnode = ( struct cadtlist *) malloc( sizeof(struct cadtlist));
    if( NULL != newnode )
    {
        printf(" enter the data to be added");
        scanf("%s", data);
        n= cadt_add_list(data,newnode);
        if( 1 == n)
        return newnode; 
    }
    else
    {
        printf(" error while allocating memory");
        exit(1);
    }
   }
   struct cadtlist* cadt_add_list( char* item,struct cadtlist * list) 
  {
   list->data = item;
   if(NULL == list->data)
    {
        return list;
    }
    else
    {
        printf(" error while adding data");
        exit(1);
    }
   } 

 int main()
 {
    struct cadtlist* list1;
    list1 = cadt_list_init();

    return 0;
  }

1 个答案:

答案 0 :(得分:0)

1) - 使用原型进行前向声明

2) - 您正在传递本地变量的地址

char * data; /* Local variable */
struct cadtlist * newnode;
newnode = ( struct cadtlist *) malloc( sizeof(struct cadtlist));
if( NULL != newnode )
{
    printf(" enter the data to be added");
    scanf("%s", data);
    n= cadt_add_list(data,newnode); /* Passing local variable */

并将地址指定给另一个变量

struct cadtlist* cadt_add_list( char* item,struct cadtlist * list) 
{
    list->data = item;

请注意,当您退出cadt_create_list()时,data不再可用(可能包含垃圾)

更改为

struct cadtlist* cadt_add_list( char* item,struct cadtlist * list) 
{
    list->data = strdup(item); /* Reserve space for the string */