iostream的问题,我的输出endl是littles square

时间:2010-02-25 15:49:04

标签: c++ iostream newline

当我写入I文件时,我的输出有问题当我将endl更改为行时,我得到了正方形。

std::ofstream outfile   (a_szFilename, std::ofstream::binary);
outfile<<"["<<TEST<<"]"<<std::endl;

我在我的文件中得到类似的东西加上其他输出不写在下一行但是在同一个上。

[TEST]square

显然我不能在这里写广场,但它是关于ofstream是二进制还是其他东西?

3 个答案:

答案 0 :(得分:5)

在这种情况下,你真的不想以二进制模式打开文件。

请改为尝试:

std::ofstream outfile   (a_szFilename);
outfile<<"["<<TEST<<"]"<<std::endl;

答案 1 :(得分:3)

您正在以二进制模式打开文件。在这种情况下,endl被写为\ n而Windows上的换行符应该是\ r \ n

要以文本模式打开文件,请不要包含binary标记,翻译将自动完成

std::ofstream outfile(a_szFilename);
outfile<<"["<<TEST<<"]"<<std::endl;

答案 2 :(得分:2)

这可能是因为你处于二进制模式并且行结尾是错误的。 std::endl会在刷新之前将'\n'放在流上。在文本模式下,它将转换为适合您平台的正确行。在二进制模式下,不会发生此类转换。

如果你在Windows上,你的代码将有一个换行符(LF),但Windows也需要先回车(CF),即'\r'。也就是说,它想要“\ r \ n”,而不仅仅是换行符。

您的修复方法是以文本模式打开文件。二进制文件不会输出换行符或格式化输出,这就是您不想使用提取和插入操作符的原因。

如果您真的想使用二进制文件,那么请将您的文件视为二进制文件,并且不要期望它能够正确显示。二进制和格式化输出不是齐头并进的。根据您的使用情况,您似乎应该以文本模式打开。