阅读文件并将数据存储为结构数组时出错- c

slmsl1lt  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一个文件包含关于学生的数据,格式如下:

ID avg_scores first_name last_name city department

我用这些字段创建了一个student的结构体:

typedef struct student {
    int student_id;
    int avg_scores
    char* first_name;
    char* last_name;
    char* city;
    char* department;
} *student;

我想逐行读取文件并将数据存储在学生数组中。我在char* fields中遇到了麻烦。我错过了什么
还有-为什么我需要分别管理这些?它没有工作,否则,我真的不明白它-我也不知道每个项目的确切大小。
这是我创建的函数

student * getStudents(FILE * students, int numberOfStudents){
    student * studentsPtr = malloc(numberOfStudents * sizeof(student));

    for (int i=0; i<numberOfStudents; i++){
        studentsPtr[i] = malloc(sizeof(student));
        studentsPtr[i]->first_name = malloc(20*sizeof(char));
        studentsPtr[i]->last_name = malloc(20*sizeof(char));
        studentsPtr[i]->city = malloc(20*sizeof(char));
        studentsPtr[i]->department = malloc(20*sizeof(char));
        fscanf(students, "%d %d %s %s %s %s", &studentsPtr[i]->student_id,
               &studentsPtr[i]->avg_scores, studentsPtr[i]->first_name,
               studentsPtr[i]->last_name, studentsPtr[i]->city, studentsPtr[i]->department);
    }
    return studentsPtr;
}
tp5buhyn

tp5buhyn1#

char*只不过是指向char类型的指针。指针和数组共享相同的语法,但它们并不相同.您已经定义了像char* department;这样的指针,但它们并不指向任何东西。malloc为您提供了一个可供指向的内存块。
既然你已经得到了一个最大值,你可以通过这样定义你的结构体来避免单独的malloc s:

typedef struct student {
    int student_id;
    int avg_scores
    char first_name[20];
    char last_name[20];
    char city[20];
    char department[20];
} *student;

现在,您将不必malloc单个字段。现在,你有了数组。

相关问题