【问题标题】:What is the point of using *both* Carriage Returns and Line Feeds?使用 *both* 回车和换行有什么意义?
【发布时间】:2011-06-16 21:53:28
【问题描述】:

我以为一个就足够了。但是,当您可以简单地使用 CR (0D) 时,这样做有什么意义呢?通常,每当我使用字符串 (C++) 时,我都会这样做:

myString = "Test\nThis should be a new line!\nAnother linefeed.";

注意:对于阅读本文的非 C++ 程序员,"\n" 是换行符 (0x0A)。

但我真的应该这样做吗:

myString = "Test\r\nThis should be a new line!\r\nAnother carriage return/linefeed pair.";

注意:"\r" 表示回车 (0x0D)。


编辑:这应该在 Programmers.SE 上吗?

【问题讨论】:

  • 在 C++ 中你不应该使用任何一种 - 使用 std::endl。
  • 做CRLF的目的是为了Windows用户。
  • @PaulR:使用 endl 与使用 \n 加冲洗相同。 endl 没有便携性或其他优势。
  • std::endl 强制刷新流,使其变慢
  • @PaulR 抱歉,我的意思是我用 "\n" 表示 C,但最近 C++ 是 std::endl

标签: history carriage-return linefeed


【解决方案1】:

请记住,这些代码都来自旧的电传打字机。这些实际上是打字机:既需要将纸张推进一行(换行),又需要将打印头(在托架上)返回到纸张的左侧(回车)。

【讨论】:

    【解决方案2】:

    Windows / Unix / 旧 Mac 系统在文本文件(不是二进制文件)中写入新行的方式各不相同。如果您在 Windows 下编程,那么在二进制模式下,您将读取(并且您可能想要写入)CRLF 结尾。在类 unix 系统下,它只是 LF。

    如果您处理自己的数据格式...选择哪种方式并不重要。这一切真的只取决于你想对字符串做什么以及你从哪里得到它。

    【讨论】:

      【解决方案3】:

      像 UNIX 和 OSX 等一些系统只使用换行符,DOS 使用额外的回车符以便与电传打字机兼容,而 Windows 继承了该架构。

      【讨论】:

        【解决方案4】:

        您在 Windows 上同时使用两者,因为这是 Windows 上的自定义。就是这么简单。但是您只为用于 Windows 的文件编写这两个文件。

        【讨论】:

          猜你喜欢
          • 2012-09-26
          • 2012-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-07
          • 1970-01-01
          相关资源
          最近更新 更多