C++ 将字符串打印到文件,为什么需要额外的位?
我正在使用VisualC++2010, 我有一个大字符串9600000字节要打印 当我将其写入文件时,文件大小更大,为9 957 891字节。为什么? 我在调试模式下检查了文件大小,所以我确定它是9600000C++ 将字符串打印到文件,为什么需要额外的位?,c++,string,file,printing,visual-c++-2010,C++,String,File,Printing,Visual C++ 2010,我正在使用VisualC++2010, 我有一个大字符串9600000字节要打印 当我将其写入文件时,文件大小更大,为9 957 891字节。为什么? 我在调试模式下检查了文件大小,所以我确定它是9600000 ofstream output_asci("output.bin"); output_asci<<the_string; output_asci.close(); 流输出的_asci(“output.bin”); 输出\u asci 尝试添加标志ios::binary作为s
ofstream output_asci("output.bin");
output_asci<<the_string;
output_asci.close();
流输出的_asci(“output.bin”);
输出\u asci
尝试添加标志ios::binary
作为stream::open
的参数,我确实认为这会起作用,但我还没有测试它。不知道。文件中有换行符吗?如果是这样,它们将在Windows系统上从'\n'
转换为'\r','\n'
,以匹配Windows文件中的传统换行符。这是因为系统添加了一些用户看不见的东西,以帮助用户理解文件。@infeed:我不这么认为(除非你指的是换行符随换行符一起组成换行符)。对不起,但不是在文件中,对吗?@Infeed:不是我27年编程中见过的。文件包含你写给它们的内容。没有其他内容。C运行时将转换换行符,但如果你将16个字节写入一个文件(没有换行符),文件将包含16个字节,不多也不少。当然,磁盘上实际占用的空间可能更大,因为大多数文件系统都有一些数据块大小,可以将其四舍五入到[而且在非常旧的文件系统中,文件中没有字节数,因此文件必须有一个结束标记]取决于文件应该是“二进制”还是“文本”类型的文件。我试着询问文件中是否有换行符,但还没有回答。如果有换行符,这将解释文件大小不同的原因。如果文件是文本文件,则将其写入二进制文件只会使其无效(尽管“大小合适”)使用二进制模式写入字符串是完全可以的,只要字符串具有您需要在原始数据中写入的所有内容(正确设置编码)是的,但在其他希望换行符为CR+LF的应用程序中,它不会作为文本文件“工作”,如果这是最初的意图[我们仍然不知道,因为OP没有返回“是的,我想要一个文本文件”或“不,我不想要一个文本文件”].Aha!对不起,我误解了,OP可以自己处理CR LF,如果默认操作系统行为不是他想要的是,但是如果OP想要输出一个~9.6MB的文件,OP可以在写字板或类似的东西中打开,使用文本和常规的C样式行结尾将是“正确”的做法。我最初的评论就是这样“这实际上可能不是OP想要的”。如果它不可读,那么将其二进制化以使其大小合适并没有多大帮助。。。