添加详细信息链接的结构



我写了此代码:(上面的结构和下面的功能(

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;
}

最新更新