C语言常见小错误- wb+ 读取失败
wb+ 文件打开模式的一种,表示以文件处于 二进制读写 模式
C 语言是一门简单但复杂的语言,这话听起来可不矛盾。C 语言语法简单,容易上手,但越学越觉得难,要求编程者拥有较强的逻辑能力,庞大的 C 语言基础知识储备,同时还要有一定的英语基础( 查询英文文档或阅读外国网友解决bug的办法 ),以及——无处不在的细节!
如果你正在写一个项目,可能遭遇过被 wb+ 折磨的时刻,特别是调试代码的时候,你会觉得是不是自己学了个假 C 语言。以上的问题所在,全都是一个原因,没有阅读官方文档,在 C 17 草案中,发现了一个关键信息:

Note that a file positioning function may further modify the file position indicator after discarding any pushed-back
characters.
注意:在丢弃任何 推回(pushed-back) 字符之后,文件定位函数可能进一步修改文件位置标识(indicator)。
前半句看不懂没关系,因为我也不懂,后半句看懂就可以了——“文件定位函数可能进一步修改文件位置标识”。结合原文给出的信息,我得到一个假设:一般情况下写入文件后,文件标识 (indicator)被移动到了末尾,假如使用 fread()进行读取,那什么也得不到。

废话不多说,我们使用生成临时文件函数 tmpfile() [<stdlib.h>] 作为讲解目标。第一步,使用 tmpfile() 得到一个临时文件,然后写入一些数据;第二步,使用 fread() 函数读取文件内容;
结果为:
结果显示,写入数据后,indicator 确实位于末尾处,那么使用 fread() 确实也什么得不到。
我们将 indicator 移动到文件首部,然后再试一遍。rewind() [<stdlib.h>] 函数,作用是将位置移动到首部。
结果表明确实如此:
通过测试,发现假设与实际情况吻合(确信)。所以操作文件时,一定要注意 indicator 处于的位置。否则,闹出笑话,可不好了~