我写了这段代码:(上面的结构和下面的函数)
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; }
以上就是c/c++开发分享添加细节链接结构相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522239.html