使用回车符和换行符的目的是什么?为什么要同时使用它们?

4

我认为一个符号就足够了。但是当你可以直接使用CR (0D)时,做CRLF (0x0D0A)的意义在哪里?通常,每当我使用字符串(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吗?


5
在C++中,你不应该使用"\n"或"\r",而应该使用std::endl。 - Paul R
1
@PaulR:使用 endl 和使用 \n 加上刷新是相同的。endl 没有可移植性或其他优势。 - Fred Nurk
2
std::endl 强制刷新流,使其变慢。 - tbridge
@PaulR 抱歉,我的意思是我最近在 C++ 中使用 std::endl,而不是之前的 C 中的 "\n" - Mateen Ulhaq
@PaulR 不适用于 for(int i = 0; i < 100000; ++i) std::cout << i * i << "\n"; std::cout << std::flush; - Mateen Ulhaq
显示剩余3条评论
4个回答

16

请记住,所有这些代码都来自于老式的电传打字机。这些打字机实际上就是打字机:必须将纸张向前推进一行(换行),同时也要将打印头(在轨道上)返回到纸张的左侧(回车)。


1

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

如果您处理自己的数据格式... 实际上选择哪种方式并不重要。这完全取决于您想对字符串做什么以及您从哪里获取它。


1

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


0

你在Windows上都使用它,因为这是Windows上的习惯。就这么简单。但你只为即将用于Windows的文件编写两者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接