执行以下代码
后文件的内容应该是什么int main (int, char**) {
std::string s1 {"Hello world"};
std::string s2 {"x"};
std::fstream f {"file1", std::ios_base::out};
f.write (s1.data (), s1.size ());
f.seekp (10, std::ios_base::end);
f.write (s2.data (), s2.size ());
return 0;
}
我的意思是应该在“旧”之间放置什么?文件结尾和' new'文件结束。我将写入光标位置改为超出文件末尾。那么,应该使用哪些字符作为履行。
执行后,我使用cat,vim和Kate读取文件。输出是:
Hello worldx # cat
Hello world^@^@^@^@^@^@^@^@^@^@x # vim
Hello worldx # Kate**
**在d和x之间的文本编辑器中有很多空格字符。凯特展示了这个文件包含无效字符的描述。
答案 0 :(得分:2)
首先是好消息:
您系统上发生的事情可能就是您所期望的 - 将10个字节的零值写入您的文件以填补“差距”。 (或者它们在内存页面中已经为零,这只是运气)。
^@
是CTRL-@
的简写。在ASCII系统中,CTRL键从您按下的键的ASCII代码中减去十进制64。 @
是ASCII码64或0x40。
现在是坏消息:
c ++标准对此事无话可说,底层C API也没有。所以你所做的事情可能不是便携式的 - 除非你不关心那些字节的值。