希望这不是以前有人问过的问题,我已经查看了之前提出的问题,但似乎没有一个问题适用于我的问题。
我正在处理程序的一些问题,我正在努力从文件中读取文本行。我正在尝试阅读的文件的格式是:
10
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
first_name last_name long_int_number
(你会注意到10也代表了列表中的项目数。)
我写的代码是:
struct student
{
long studentNumber;
char *firstName;
char *lastName;
};
struct student *readFile(char *fileName, int *numOfStudents)
{
struct student readStudents[10];
FILE *fp;
int i;
char *buff;
fp=fopen(fileName,"r");
fscanf(fp,"%d",numOfStudents);
for (i=0;i<*numOfStudents;i++)
{
fscanf(fp,"%s",readStudents[i].firstName);
//printf("%s\n",readStudents[i].firstName);
fscanf(fp,"%s ",readStudents[i].lastName);
//printf("%s\n",readStudents[i].lastName);
fscanf(fp,"%ld",&readStudents[i].studentNumber);
//printf("%ld\n",readStudents[i].studentNumber);
}
fclose(fp);
/*the remaining code*/
}
我已经注释掉了我用来查看错误发生位置的printf语句。基本上,它正确读取numOfStudents然后正确执行第一个循环,但在此之后程序崩溃。我不确定为什么会这样。最初我认为这是因为阅读新行时遇到了问题,但这可能不是问题,因为10和第一组学生信息之间有一条新线。我对编程很新,你能提供的任何帮助都会非常有用!
谢谢。 :)
答案 0 :(得分:0)
我已经查看了之前提出的问题,但它们似乎都不适用于我的问题。
这与几十个完全相同的问题完全重复。您没有为指针readStudents[i].firstName
分配内存,因此它们未初始化,并且访问它们指向的内存会导致未定义的行为,这表现为崩溃。您需要使用数组作为结构成员,或malloc()
动态地使用内存。