C语言feof()函数应该注意的问题

我有一个二进制文件a.dat做为参数存储文件,里面依次存储了多项数据项;由于不同客户机的参数存储文件版本不同,存储的数据项有多有少,文件大小也就不同。因此在读取每个数据项时,都需要对每个数据项都要判定是否存在,如果不存在,赋默认值。代码如下:

null
if ( !feof( pFile ) )
{
    fread( &itemN, sizeof(unsigned char), 1, pFile );
}
else
{
    itemN = 0;
}

后来发现,这么写是有问题的:如果文件中只有N-1项,没有第N数据项,也会执行fread( &itemN, sizeof(unsigned char), 1, pFile );,因为在fread成功读取N-1项后,直接调用feof( pFile )不会返回非0值,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。只有再次调用fread()执行读操作,feof()才能探测到文件结尾。

所以,正确的写法应该是:

fread( &itemN, sizeof(unsigned char), 1, pFile );
if ( feof( pFile ) )
{
    itemN = 0;
}
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容