添加细节链接结构

我写了这段代码:(上面的结构和下面的函数)

list * add_student(slist * students, char * name, int id) { slist * temp, * adder; if (!(adder = (slist * ) malloc(sizeof(slist)))) exit(1); student * data; if (!(data = (student * ) malloc(sizeof(student)))) exit(1); data - > name = name; data - > id = id; data - > courses = NULL; adder - > info = data; adder - > next = NULL; if (!students) { return adder; } for (temp = students; temp - > next; temp = temp - > next); temp - > next = adder; return students; } 

结构是:

 typedef struct course { char *title; int number; struct slist *students; } course; typedef struct slist { student *info; struct slist *next; } slist; typedef struct clist { course *info; struct clist *next; } clist; 

第一个function是将学生添加到学生列表中。 它添加了学生,但如果我试图放另一个学生,名称正在替换第一个名称(只有名称而不是数字)。

我无法在代码中发现错误,非常感谢您的帮助。

谢谢。

为名称分配内存并从name参数复制它:

 list * add_student(slist * students, char * name, int id) { slist * temp, * adder; if (!(adder = (slist * ) malloc(sizeof(slist)))) exit(1); student * data; if (!(data = (student * ) malloc(sizeof(student)))) exit(1); if (!(data->name = (char * ) malloc(sizeof(char) * (strlen(name)+1)))) exit(1); strcpy(data->name, name); data->id = id; data->courses = NULL; adder->info = data; adder->next = NULL; if (!students) { return adder; } for (temp = students; temp - > next; temp = temp - > next); temp - > next = adder; return students; }