fread返回值0 feof返回值为16 问题解决。
2012-09-12 16:36
239 查看
写的一个程序,要从二进制文件中读取,但是我读取到11396字节的时候 fread返回0,其feof(fp)==16
百度百科看到:
第一句话 真是误导人啊,我明明没到文件结束,却返回非0.
继续看,原来根据读入的如果是 0x1A 就是feof非0 靠,我一看我的11396-8 字节,正是0x1A。
怎么办呢?
我的fp是这么fopen的
r 改成 rb 即可。终于明白了,本以为 b 没啥用呢。。对了 在linux下 b 应该没用。 所以 这个情况 只在非posix环境下才是的。
这是 fopen 百度百科 里面 说的。
所以百度百科 feof里面 应该 有三种返回值 0 1 非0和1的。
还有 fread第二个参数,如果 实际没有读取那么多,则fread返回值 则可能小于 count。见:
http://yijiuzai.blog.163.com/blog/static/1037567272010417103312770/
百度百科看到:
feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。 EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。 当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。 “C”语言的“feof()”函数和数据库中“eof()”函数的运做是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。
第一句话 真是误导人啊,我明明没到文件结束,却返回非0.
继续看,原来根据读入的如果是 0x1A 就是feof非0 靠,我一看我的11396-8 字节,正是0x1A。
怎么办呢?
我的fp是这么fopen的
fopen(this->relativeRoadIDFileName,"r");
r 改成 rb 即可。终于明白了,本以为 b 没啥用呢。。对了 在linux下 b 应该没用。 所以 这个情况 只在非posix环境下才是的。
这是 fopen 百度百科 里面 说的。
所以百度百科 feof里面 应该 有三种返回值 0 1 非0和1的。
还有 fread第二个参数,如果 实际没有读取那么多,则fread返回值 则可能小于 count。见:
http://yijiuzai.blog.163.com/blog/static/1037567272010417103312770/
相关文章推荐
- 解决fedora16不能以root用户运行google chrome浏览器的问题
- 数字图像处理成长之路16:QT中问题的解决办法androiddeployqt.exe"退出,退出代码 14
- 利用feof()函数复制文件的C代码(解决复制后文件多一字符的问题)
- ValueError: IV must be 16 bytes long问题的解决
- window.showdialog showModalDialog 完全手册,解决模态窗口,传值和返回值问题
- PHP的exec()函数无返回值排查方法------借鉴本文方法后派上了用场,解决了问题
- 解决PowerDesigner 16 Generate Datebase For Sql2005/2008 对象名sysproperties无效的问题
- feof多读一次问题解决方案
- BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题
- 在ubuntu16上安装sublime3出现的问题并解决
- 从程序员到项目经理(16):原来一切问题都是可以解决的
- iqiyi视频显示区域始终保持 16:9 问题解决方案
- 解决nginx在记录post数据时 中文字符转成16进制的问题【转载】
- vmware虚拟机安装ubuntu 16.04时vmware tools按钮变灰问题解决方法
- 解决PowerDesigner 16 Generate Datebase For Sql2005/2008 对象名sysproperties无效的问题
- 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题
- Ubuntu 16只能以客人会话身份登录问题的解决
- Chrome中模态对话框showModalDialog返回值问题的解决方法
- 解决PowerDesigner 16 Generate Datebase For Sql2005/2008 对象名sysproperties无效的问题
- PHP递归返回值时出现的问题解决办法