fgets只读取文件的第一行

fgets only read the first line of file

本文关键字:一行 读取 文件 fgets      更新时间:2023-10-16

我正试图从.cpp文件中读取一个文件。我使用的是C库,所以不要混淆这一点。

所以这个问题和我在标题中所说的一样清楚。fgets方法可以读取第一行,但当涉及到第二行时,它既不能读取第二行,也不能读取文件的其余部分(因为它在出现问题时退出)。

你可以找到代码的相关部分:

void read_input()
{
      int i = 0, N = 5;
  char str[STR_SIZE], line[STR_SIZE];
  FILE *fp;
  fp = fopen("out", "r");
  if (!fp)
    {
      fprintf(stderr, "error: file could not be openedn");
      exit(1);
    }
  for (i = 0; i<2; i++)
    {
      if (fgets(str, STR_SIZE, fp) == NULL)
        {
          fprintf(stderr, "error: failed at file readingn");
          exit(1);
        }
      if (feof(fp))
        {
          fprintf(stderr, "error: not enough lines in filen");
          exit(1);
        }
      if ((sscanf(str, "%s", line) != 1) )
        {
          fprintf(stderr, "error: invalid file formatn");
          exit(1);
        }
      printf("%dt%sn", i, line);
      fclose(fp);
    }
}

我相信问题已经存在,因为您在循环中使用了fclose(fp);。因此,在第一次迭代之后,fp被传递给fclose(),并且在任何进一步的迭代中,对于fp的任何重复使用,都将调用未定义的行为,因为fp不再有效

解决方案:将fclose(fp);移出循环。

您正在关闭循环中的文件!将fclose函数置于循环之外。

for (i = 0; i<2; i++)
{
    ....
    printf("%dt%sn", i, line);
    fclose(fp); // <-- here, move out of the loop.
}