注意:我无法使用其他文件重现此错误,因此必须有一些副作用。请暂时忽略!
编译器:Microsoft C ++ 2010,平台:Windows 8
我使用std :: fstream打开现有文本文件以在文件末尾附加数据。这应该很简单:
ofstream out;
out.open(fname);
out << "Hello";
out.close();
out.open(fname, ios::in | ios::out | ios::ate);
out << "World";
out.close();
数据将在末尾附加,但第一个新char会自动替换为NULL字节:
Hello\0orld
这是在重新打开文件关闭的那一刻发生的。文件仍然打开时,一切都很好:
ofstream out;
out.open(fname);
out << "Hello";
out.close(); // -> "Hello"
out.open(fname, ios::in | ios::out | ios::ate);
out << "World";
out.flush(); // -> "HelloWorld"
out.seekp(-7, ios::cur);
out << "Test";
out.flush(); // -> "HelTestrld"
out.close(); // -> "HelTe\0torld"
NULL字节始终位于写指针重新打开文件时的位置。
我以前的编译器从未见过这种行为。有什么想法吗?