如何解决无法使用双指针将值分配给结构字段? C
我可能在这里发了一些非常明显的消息,但是我已经呆了几个小时了,我不知道自己在做什么错。基本上,我有一个类型为student
的双指针,称为class_list
。
student
是具有多个字段的结构,例如ID
,first_name
,last_name
。
我需要从文件中读取数据并将此数据放置在每个结构student
的相应字段中。
这是我的实现(顺便说一句,文件中的第一个值包含学生人数,因此行fscanf(input_file,"%d",sizePtr);
):
student** create_class_list(char *filename,int *sizePtr) {
printf("FUNCTION CALL **\n\n");
FILE *input_file = fopen(filename,"r");
fscanf(input_file,sizePtr);
int totalStudents = *sizePtr;
student **class_list = calloc(totalStudents,sizeof(student));
while (totalStudents) {
fscanf(input_file,&(*class_list)->student_id);
fscanf(input_file,"%s",(*class_list)->first_name);
fscanf(input_file,(*class_list)->last_name);
class_list++;
totalStudents--;
}
fclose(input_file);
return class_list;
}
我尽力通过其他堆栈文章来寻找答案,this似乎清楚地说明了我的问题。但是,我已经通过首先取消引用双指针(*class_list)->student_id
来尝试了他们的解决方案,但是执行代码时仍然遇到问题。
解决方法
至少:分配错误
// This is the size of a structure
// student **class_list = calloc(totalStudents,sizeof(student));
student **class_list = calloc(totalStudents,sizeof *class_list );
// This is correct,size of a pointer
我建议一种新方法。分配一个student
数组,而不是一个指向student
的指针数组。
// student** create_class_list(char *filename,int *sizePtr) {
student* create_class_list(char *filename,int *sizePtr) {
*sizePtr = 0;
printf("FUNCTION CALL **\n\n");
FILE *input_file = fopen(filename,"r");
if (input_file == NULL) return NULL; // Check return value
int totalStudents = 0;
fscanf(input_file,"%d",&totalStudents);
student *cl = calloc(totalStudents,sizeof *cl);
if (cl) {
int i;
for (i = 0; i < totalStudents; i++) {
// Check return value of `fscanf()` (Should also do so above)
if (fscanf(input_file,"%d%s%s",// Better to use width limits with %s
&cl[i]->student_id,cl[i]->first_name,cl[i]->last_name) != 3) break;
}
*sizePtr = i; // Record how many were read
}
fclose(input_file);
return cl;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。