我写了此代码:(上面的结构和下面的功能(
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;
第一个功能应该将学生添加到学生列表中。它添加了学生,但是如果我想把另一个学生放在另一个学生中,该名称是替换第一个名称(只有名称而不是数字(。
我在《代码》中找不到一个错误,真的很感谢您的帮助。
谢谢。
为名称分配内存,然后从名称参数复制它:
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;
}