您的位置:首页 > Web前端

fgets重复读取最后一行,都是feof惹的祸

2013-09-05 14:45 239 查看
写了一个小程序用于读取文件,每次输出时最后一行都重复输出,经Debug发现是因为feof慢了一拍。当fgets读过最后哦一行之后,feof()仍然返回的是0,又一次读出错之后feof才检测到文件结束。下面用代码来说明:

 FILE *fd;

  char buf[1024];

  string temp;

  fd = fopen(filename.c_str(), "rb");

  if (NULL == fd)

  {

    return "";

  }

  while (!feof(fd))

  {

    fgets(buf, 1024, fd);

    temp += buf;

  }

  fclose(fd);

  return temp;

 

通过查询一部分文档发现:

fgets读到文件最后一行的时候(返回不是NULL) ,feof测试为假,再fgets一次(返回为NULL),再feof测试为真。

feof是通过判断read返回错误时,才判断流已经到达结尾。

代码修改如下:

  FILE *fd;

  char buf[1024];

  string temp;

  fd = fopen(filename.c_str(), "rb");

  if (NULL == fd)

  {

    return "";

  }

  while ( fgets(buf, 1024, fd) != NULL)

  {

    temp += buf;

  }

  fclose(fd);

  return temp;

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息