【发布时间】:2015-03-17 03:30:38
【问题描述】:
以下 C++ 代码:
ofstream out("File.txt");
const char *str = "0\r\n1\r\n2\r\n";
out << str;
创建以下文件(上面的 File.txt):
为什么会有额外的 CR 和 LF?我的平台是 Windows 7 和编译器 VS 2013。
上述情况将导致我的另一个程序出现问题,该程序将逐行解析此文件,并且该程序假定每一行都包含数据。我可以删除空行,但我想了解为什么在保存 str 时,会有额外的 CR 和 LF。
【问题讨论】:
-
没有多余的 LF,只有 CR。
-
如果您以文本模式打开文件,它会将
\n转换为\r\n,因为这是Windows 的正确行尾。如果您不想这样,请以二进制模式打开文件。 -
Windoze 出于某种原因喜欢多字符行终止符。可能只是为了让我们的生活更加复杂。
-
@jschultz410,这是行式打印机的正确行尾,它来自哪里。您需要一个新行和一个回车来开始一个新行。
-
@Blindy 我想知道为什么 unix 采用了不同的方式?可能是因为多字符行终止符通常会增加额外的复杂性,而您确实希望保持当前行偏移但下移一行的极其罕见的好处。