c语言 判断文件结束问题 feof()

最近做开发的时候用到c语言文件的读写函数fread(),采用while(!feof(fp))来控制循环,结果发现每次读取数据的时候总会把最后一个数据单元读取两次,很是不解。

        后来查找资料发现,原来fread()在读到文件最后一个字节时,feof(fp)还是为0值,此时while(!feof(fp))的控制条件依然为真,所以会将最后一个数据单元再次读取一遍。然后feof(fp)才为非0值,因此说这个方法在某些场合是不可行的。

       可以采用   while(fread(p,len,1,fp))   的方式来判断,因为fread返回的是读取的字节数,如果到了文件末尾,则读取到的字节数为0,while判断为假,跳出循环,即可把问题解决。

原文地址:https://www.cnblogs.com/virusdefender/p/3364092.html