在“R + B”模式下使用时C ++ 11龟etc输出一个0到我的文件

问题描述 投票:0回答:1

我正在写一些文件IO原语为语言翻译,和我在与fgetc奇怪的行为问题。

这里是一个重复的例子,(至少在窗户,还没有尝试过在Linux):

FILE* f = fopen("reprod.txt", "r+b");
fputc('a', f);
fputc('a', f);

用空reprod.txt文件开始,该代码会写两个'a's该文件。这可以。但是,下面的代码做不同的东西(再次用一个空文件开始):

FILE* f = fopen("reprod.txt", "r+b");
fputc('a', f);
fputc('a', f);
fgetc(f);

我本来期望fgetc回到这里EOF(事实并非如此)。相反,它返回0和一个额外的0字节写入到我的档案!

我读过的fgetc的手册,并没有提到这事!作为参考,我在Windows 10在编制下用G ++ ++ 11有一个很好的理由,为什么发生这种情况,我该如何预防呢?

c++ file
1个回答
1
投票

对于fopen文档指示在更新模式("+")打开文件时,呼叫必须进行在执行随后的读取之前执行写入,后fflushfseekfsetpos,或rewind。无法找到,如果它的定义,如果你不这样做,会发生什么情况的任何单词。我试图与在Visual Studio 2017年没有锁定比较此修复程序,似乎纠正不必要的行为

© www.soinside.com 2019 - 2024. All rights reserved.