【问题标题】:Issue with using fscanf() in a loop在循环中使用 fscanf() 的问题
【发布时间】:2013-11-30 19:36:47
【问题描述】:

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

我正在使用的程序从文件中读取文本行时遇到了一些问题。我要读取的文件格式是:

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 和第一组学生信息之间有一个新行。我对编程相当陌生,您可以提供的任何帮助都会非常有帮助!

谢谢。 :)

【问题讨论】:

  • 看起来你在写之前没有为firstnamelastname 分配空间
  • 感谢您的帮助! :)

标签: c file-io scanf


【解决方案1】:

我查看了以前提出的问题,但似乎没有一个问题完全适用于我的问题。

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

【讨论】:

  • 谢谢!对于重复的问题,我很抱歉,我想我只是对为什么我的程序在第一次循环循环中始终正确运行并在此之后停止工作感到困惑。正如我所说,我是一个相当新的程序员,所以这些事情有时会在我脑海中浮现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多