欢迎光临散文网 会员登陆 & 注册

C语言常见小错误- wb+ 读取失败

2022-08-11 08:26 作者:凫水亿  | 我要投稿

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 处于的位置。否则,闹出笑话,可不好了~


C语言常见小错误- wb+ 读取失败的评论 (共 条)

分享到微博请遵守国家法律