在循环中使用fscanf()的问题

时间:2013-11-30 19:36:47

标签: c file-io scanf

希望这不是以前有人问过的问题,我已经查看了之前提出的问题,但似乎没有一个问题适用于我的问题。

我正在处理程序的一些问题,我正在努力从文件中读取文本行。我正在尝试阅读的文件的格式是:

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和第一组学生信息之间有一条新线。我对编程很新,你能提供的任何帮助都会非常有用!

谢谢。 :)

1 个答案:

答案 0 :(得分:0)

  

我已经查看了之前提出的问题,但它们似乎都不适用于我的问题。

这与几十个完全相同的问题完全重复。您没有为指针readStudents[i].firstName分配内存,因此它们未初始化,并且访问它们指向的内存会导致未定义的行为,这表现为崩溃。您需要使用数组作为结构成员,或malloc()动态地使用内存。