写的一个程序,要从二进制文件中读取,但是我读取到11396字节的时候 fread返回0,其feof(fp)==16

百度百科看到:

  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/

fread返回值0 feof返回值为16 问题解决。相关推荐

  1. mysql int 默认值 0,mysql默认值设定

    default value 一定要是一个常量,不能使一个函数或者是表达式,那么这就意味着你不能给一个date 类型的列 设置像CURRENT_DATE NOW() CURRENT_TIMESTAMP这 ...

  2. error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”...

    1.错误提示与原因分析 或者是提示:error LNK2038: 检测到"_ITERATOR_DEBUG_LEVEL"的不匹配项: 值"0"不匹配值" ...

  3. win7(旗舰版)下,OleLoadPicture 加载内存中的图片(MagickGetImageBlob),返回值 0

    昨天去三哥家,想把拍好的照片缩小一下,我用很久前写的一个软件进行缩小,然后进行一次效果预览,这个时候弹出: Call OleLoadPicture Fail - loadPictureFromMW 奇 ...

  4. python中表达式4**0.5的值为_Python内置函数__用来返回序列中的最小元素

    [填空题]表达式 int(4**0.5) 的值为 [判断题]3+4j不是合法的Python表达式. [填空题]已知列表对象x = ['11', '2', '3'],则表达式 max(x) 的值为 [填 ...

  5. 给定一个只由 0、1、、|和^五种字符组成的字符串express,再给定一个布尔值 desired。返回express能有多少种组合方式,可以达到desired的结果。

    问题描述: 给定一个只由 0(假).1(真).&(逻辑与).|(逻辑或)和^(异或)五种字符组成的字符串express,再给定一个布尔值 desired.返回express能有多少种组合方式, ...

  6. Redis中有序集合zset数据类型(增加(添加元素)、获取(获取指定范围元素、返回权值在min和max之间的成员、返回成员member的score值)、删除(删除指定元素和指定权值范围的元素))

    sorted set,有序集合 元素为string类型 元素具有唯⼀性,不重复   [值不能重复] 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序 说明:没有修 ...

  7. 记:返回方法参数的值(或多个值),

    直接贴示例代码: static void Main(string[] args) {int cs;int s= outfanhui(90, out cs); Console.WriteLine(&qu ...

  8. 【C 语言】C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )

    文章目录 一.C 项目开发代码规范 一.C 项目开发代码规范 上一篇博客 [C 语言]字符串模型 ( 键值对模型 ) 中 , 完成了字符串的 键值对 查找功能 , 代码不太规范 ; C 项目开发代码规 ...

  9. 第八天学习Java的笔记(方法有参无参,有返回值和无返回值)

    48天 方法 对比有参数和无参数 package Demo03;/* * 有参数:小括号当中有内容,当一个方法需要一些数据条件才能完成任务的时候,就是有参数 * 例如两个数字相加,必须知道两个数字各是 ...

最新文章

  1. 数组反向遍历ios_LeetCode106.从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inor...)...
  2. kafka 消息服务
  3. nopCommerce的源代码结构和架构
  4. 《C++覆辙录》——2.9:自反初始化
  5. 计算机控制系统期末判断题,计算机控制系统期末试题.doc
  6. Struts项目中,检测用户名是否被占用/查询账户名称是否被占用/查询账户名称是否已被注册/检查用户名是否被注册
  7. CSS3详解:transform、transition
  8. 超简单的mysql多实例布置
  9. JavaScript的数据结构与算法(三) —— 单向链表
  10. 什么是 Unix 以及它为什么这么重要?
  11. PNChart,简洁高效有动画效果的iOS图表库
  12. 轻松在阿里云上搭建Redis
  13. MongoDB最大连接数的查看与修改
  14. elementui中el-upload自定义上传方法中遇到的问题
  15. Inceptor如何访问本地文件
  16. 程序猿的中秋节——浪漫至死不渝!!
  17. clonezilla(clonezilla备份系统)
  18. Synch4j使用指南
  19. 2015年杭电计算机存储器扩展,杭电计算机组成原理存储器设计实验5
  20. 前端 彩票开奖走势图的实现

热门文章

  1. java如何对foo bar调用方法_关于java:如何测试工厂方法传递给构造函数的参数?...
  2. ribbon设置权重_spring cloud gateway+ribbon 组合指定版本权重分流(简易灰度发布实现)...
  3. python函数默认参数_Python中函数的默认参数问题
  4. 两个股市真理之间的矛盾
  5. 肚子上挂张画就能隐身:AI完全看不出我在哪,更看不出我是人类了 | 开源
  6. GAN能生成3D图像啦!朱俊彦团队公布最新研究成果
  7. 动物面部识别技术哪个强?奶牛鸡猪狗绵羊……
  8. 滴滴这车值不值得上?前Google全球技术总监郄小虎说来来来
  9. 谷歌大脑AutoML最新进展:不断进化的阿米巴网络
  10. 深度学习蚕食软件,十年内大部分软件工作不再涉及编程