(转)
写了一个小程序用于读取文件,每次输出时最后一行都重复输出,经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;
---------------------
作者:jijingyue
来源:优快云
原文:https://blog.youkuaiyun.com/jijingyue/article/details/11136923
版权声明:本文为博主原创文章,转载请附上博文链接!