【问题标题】:Unwanted Carriage Returns in ofstream [duplicate]流中不需要的回车[重复]
【发布时间】: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 采用了不同的方式?可能是因为多字符行终止符通常会增加额外的复杂性,而您确实希望保持当前行偏移但下移一行的极其罕见的好处。

标签: c++ windows file


【解决方案1】:

\n 输出特定于平台的换行符,在这种情况下,每个\n 都写为\r\n。你不需要手动添加自己的\r,这是重复的来源。

【讨论】:

  • 如果我根本不想要 \r 怎么办?
猜你喜欢
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
相关资源
最近更新 更多