日期:2014-05-17  浏览次数:20555 次

\r \n的研究
因为在学习php,所以就发在这个区了。之所以这样写这个帖子,除了人云亦云外,还有高手没说明白,新手看不明白。
我就抛砖引玉了,因为我说还不一定正确。
\r \n所代表的含义是回车和换行,在一些情况下\r \n的效果是一样的,而回车和换行的意思大多数情况下也被认为是一样的,既然这样,何谈区别?
那么我们来了解他们的出处和本质含义。
出处是打印机
\r 含义 回车 英文全称carriage return,简称CR return是回的意思,carriage是车的意思,在打印机中,指(打字机等机器上的)滑动托架,很明显大家见过打印机就知道那个“车”只能左右移动,不能上下移动,那么回车的意思就是一行结束后回到初始位置。可是在电脑上很难描述了,用向左的方向键←移动到行最前端,就是这样效果。
\n 含义换行 英文全称 new line 或者line feed,feed这里是给,加的意思,在打印机中指再添加一行,因为carriage只能左右移动,那换行只能是打印纸来移动,相当于方向键↓的效果。

大家现在明白了吧,现在意义上的回车和换行还有键盘上的Enter其实是\r\n的效果(一下的回车换行均指\r\n的效果)。

可是在使用应该是有回车必有换行的,那么把效果统一起来的也是预料之中的事情,只是表达方式不一样而已,所以才有mac用\r,unix用\n,windows用\r\n
事实在windows记事本里这三种表达方式和用键盘回车键的效果是一样的,大约是windows已经自动转成\r\n了,但是用\n\r(颠倒顺序)\r \n(中间有空格)那么是起到了两次效果,但这不是绝对的,比如在unix看起来回车换行效果正常的文件放到windows记事本里就没有效果 但是会有小黑框,这个文件我用Dreamweaver打开是正常的。

另外据说\n还有含义指一个行的结束。其实和前面说的没区别嘛,这也许是Unix用它代表回车换行的原因。
还有软回车 硬回车的问题,这个在不同平台编软件可能会遇到,前面指\n 后者指\r\n。但我没经验去说是正确与否,但在Word中shift+enter软回车就是回车换行^l,enter硬回车是换段落^p,这个问题在网页设计中也会遇到。

------解决方案--------------------
windows \r\n
linux \n
mac \r

这是操作系统的约定,也可以说是历史遗留问题
知道了就可以,没有必要讨论
------解决方案--------------------
探讨
windows \r\n
linux \n
mac \r

这是操作系统的约定,也可以说是历史遗留问题
知道了就可以,没有必要讨论

------解决方案--------------------
好帖,实在的做点研究就是好的。
话说win系统下有个一溢出漏洞就是因为此类控制字引起的。

出发代码好像是这样的:

int main( void )

    { 

    for(;{
         printf( "hung up\t\t\b\b\b\b\b\b" );

         print("hung up\t\t\b\b\b\b\b\b";

        }

    return 0;

    }

忽略了退格前有制表符的情况导致内存越界覆盖。
------解决方案--------------------
探讨
windows \r\n
linux \n
mac \r

这是操作系统的约定,也可以说是历史遗留问题
知道了就可以,没有必要讨论