c语言中换行符到底是什么(换行符的解释)

一行文字的结束符

通常,在操作系统中,会使用CR+LF会表达一行文本的结束。这个惯例的起源,来自于电传打印机那个时代。CR控制字符会将打印机的印刷头(也叫做Carriage)移动到行首(第0列),同时不会进纸。而LF控制字符会进一行纸,同时不会移动印刷头。

所以,如果你想要将印刷头移动到行首(这样打印机会另起一行),同时进纸的话,则你需要同时发送CR和LF这两个控制字符。

如果你研究过各种RFC协议文档,例如RFC0821(SMTP), RFC1939(POP), RFC2060(IMAP)或者RFC2616(HTTP),则你会发现:它们都在文档里使用了CR+LF作为一行的结束符。所以,真正的问题不是:为什么操作系统使用CR+LF作为行结束符,而是:为什么还有其他一些人使用与标准文档不同的行结束符。

Unix操作系统接受LF作为行结束符。如果你仔细地研究一下stty工具的说明文档,你会发现:onlcr选项指明了是否将一个LF字符转换为CR+LF序列。如果你正确地使用此设定,则你会得到类似如下的递进式文本:

c语言中换行符到底是什么(换行符的解释)

 

因为这些文本行都没有将输入移动到行首。所以即使是Unix操作系统,当处于原始模式时,都会要求CR+LF作为行结束符。一个隐含的CR字符会放在LF前面,这可能是Unix的一个不同之处,另一方面,它也比较”经济”,因为每行只需要一个字符作为行结束符。

Unix中的C语言将这一转换带到了标准C语言中,也即:它会要求在行尾添加一个”\n”(就是LF的编码)字符,然后将LF转换为CR+LF的任务就丢给了运行时库来做。

在C语言中,还引入了一个名词”newline”来表达一个通用的行结束符。我听说ASCII委员会在1996年左右将字符0x0A作为”newline”的编码,所以,这就更加让人迷惑了。

总结

请记得:\n是一个转义字符,表示LF,而\r则表示回车(CR)。所以,在Unix系统里,只使用\n,而在Windows里,使用\r\n作为行结束符。这就会导致这样一个结果:Unix碰到\n时,会进行CR+LF操作,而单单一个\r(CR)不会进行换行,而是显示为一个控制字符(^M)。在Windows中,需要使用”\r\n”来进行换行,如果只使用\n或者只使用\r,或者它们顺序不对,都会导致换行失败。以上内容,又进一步解释了这样一个现象:Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

真乃:傻傻分不清楚啊。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Why is the line terminator CR+LF?》

本文来自作者:运维笔记ywbj,不代表小新网立场!

转载请注明:https://www.xiaoxinys.cn/143449.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。