Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串打印到文件,为什么需要额外的位?_C++_String_File_Printing_Visual C++ 2010 - Fatal编程技术网

C++ 将字符串打印到文件,为什么需要额外的位?

C++ 将字符串打印到文件,为什么需要额外的位?,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

我正在使用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
作为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想要的”。如果它不可读,那么将其二进制化以使其大小合适并没有多大帮助。。。