我有一个文件包含关于学生的数据,格式如下:
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;
}
1条答案
按热度按时间tp5buhyn1#
char*
只不过是指向char
类型的指针。指针和数组共享相同的语法,但它们并不相同.您已经定义了像char* department;
这样的指针,但它们并不指向任何东西。malloc
为您提供了一个可供指向的内存块。既然你已经得到了一个最大值,你可以通过这样定义你的结构体来避免单独的
malloc
s:现在,您将不必
malloc
单个字段。现在,你有了数组。