编译此代码时出错
问题描述:
我正在编写代码以创建适当的链接列表。请告诉错误在这个程序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) - 使用原型为那些向声明
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 */
的地址和assignigning的地址到另一个变量
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 */
请勿张贴文字的图片,发布文字。复制/粘贴你知道... –
首先,你需要一个'cadt_create_list()'函数的前向声明... –
欢迎来到Stack Overflow! [请参阅此讨论,为什么不在'C'中投射'malloc()'和family的返回值。](http://stackoverflow.com/q/605845/2173917)。 –