我正在编写代码来创建正确的链接列表。请告诉我们此计划中的错误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;
}
答案 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 */