C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
C++11 fgetc outputs a 0 to my file when used in "r+b" mode
我正在为一种语言的解释器编写一些文件 IO 原语,但我遇到了fgetc
的奇怪行为问题。
这是一个可重现的示例(至少在Windows上,没有在Linux上尝试过):
FILE* f = fopen("reprod.txt", "r+b");
fputc('a', f);
fputc('a', f);
从空的 reprod.txt 文件开始,此代码将向该文件写入两个'a'
。这很好。但是,以下代码执行一些不同的操作(再次从空文件开始):
FILE* f = fopen("reprod.txt", "r+b");
fputc('a', f);
fputc('a', f);
fgetc(f);
我本来希望fgetc
在这里返回EOF
(它没有)。相反,它返回0
,并将一个额外的 0
字节写入我的文件中!
我已经阅读了fgetc
的手册页,它没有提到任何关于这个的内容!作为参考,我在 Windows 11 上使用 g++ 在 C++10 中进行编译。发生这种情况是否有充分的理由,我该如何防止它?
fopen
的文档指出,在以更新模式("+"
)打开文件时,必须在执行后续读取之前调用fflush
、fseek
、fsetpos
或rewind
。找不到任何关于是否定义了如果您不这样做会发生什么的词。我尝试在Visual Studio 2017中比较此修复程序与无修复程序,它似乎纠正了不需要的行为
相关文章:
- 我的文件无法正常工作,无法从C++文件中读取上下文
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 为什么URLDownloadToFile()没有下载我的文件
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- C++ while 循环没有从我的文件中读取 -1
- 这是我的 .h 文件的一些错误,当我在其中包含我的类模板时,它显示 [错误] 未终止 #ifndef
- 为什么我的".a"文件中的所有符号值都是 0
- 不会在登录名中读取C++我的文件
- 使用 c++ 将我的文件拆分为 128 个字节
- 我的C++文件期望用'while'代替 if。最后,它预计会出现'('
- 为什么当我写入文件时,结构在我的文件中消失了
- 视觉C++为什么我的文件在重新启动程序时被截断?
- 我的文件可以编译,但当我尝试运行它时"no such file or directory"
- 在Ostream上使用std :: endl使我的文件二进制
- 无法使用名称空间,也不能在我的.h文件中包含标准的C 库
- 为什么我的文件/目录操作在Windows上工作正常,但在Linux上不能
- 我的C文件是从Pro*C生成的吗
- C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
- Qt Android:如果我写信给"./myfile.txt",我的文件在哪里?
- 我的C++文件中是否有可能的内存泄漏