2011-08-10 34 views

回答

82

這是兩個字符:

  • \r是回車;
  • \n是換行符。

兩個字符結合在一起表示Windows上的新行。而在Linux上,\n代表新行。它將光標移動到Linux上新行的開頭。在Windows上,光標將停留在控制檯中的同一列上,但在下一行。

\r在Linux上的效果與在Windows上的效果相同:將光標移動到行首。可以在使用\r而不是\n的同一行上打印不同的信息。

+1

+1。作爲OP的附加信息:[Newline](http://en.wikipedia.org/wiki/Newline)。 – informatik01

2

是的,它是兩個字符:回車'\ r'後跟換行'\ n'。

5

取決於設置。 \r\n是兩個字節寬(ASCII,UTF-8等),但I/O庫如C的stdio庫和其他文件模式下操作時,可能準確透明地在\n\r\n之間轉換。

即,在Windows平臺上,一個C程序讀取文本模式流txt_in

while ((c = getc(txt_in)) != EOF) 
    printf("%02x\n", c); 

不會爲\r報告的ASCII碼。相反,putc('\n', txt_out)實際上會將\r\n寫入文本模式流txt_out

+0

爲什麼downvote? –

4

Windows不區分\r\n和任何其他兩個字符。但是,有一種情況將其視爲一個字符:如果使用C運行時並以文本形式打開文件,則文件中的\r\n將被讀取爲\n,並且\n將被寫入文件中作爲\r\n

7

其實\r is 0x0D (^M) and \n is 0x0A (^J),但.....在Windows上:

\n will write 0x0D 0x0A 

在UNIX上:

\r will write 0x0D 
\n will write 0x0A 
+0

因此,在Windows上,我們應該明確地打印\ x0A,如果我們想要在同一列中移動1行, – Viet

+0

如果我是對的,這是由於在文件流中打開文件時發生字符轉換。將'stdout'視爲二進制流而不是文本流將導致'\ n'在Windows上編寫唯一的'0x0A'而不是'0x0D 0x0A'。看@FredFoo的口氣。 – loxaxs

1

我進行了一些測試用記事本++和崇高的文本2在Windows(沒有什麼花哨),並且事實證明,\r\n確實是2個不同的角色,但是......

不同的文本編輯器可以插入或他們可能不會插入\r返回鍵被按下。

嘗試在你的文本編輯器中執行以下操作:

1 
2 
3 
4 
5 

然後按按Ctrl + F,使正則表達式和搜索\r。根據您的文本編輯器及其設置,您可能會在每行的末尾「碰撞」或「未碰到」某個角色。如果上面的文字是從另一編輯複製粘貼,也表現可能會有所不同...

一些文本編輯器允許在他們的設置,自定義在那裏,如果你喜歡\r\n或UNIX風格\n被插入時,你可以指定你按返回。最重要的是,它們可能允許您在保存文件之前通過剝離或插入\r字符來選擇強制執行一致的樣式。

+4

你不應該依賴文本編輯器,因爲它們中的一些在加載文件時可能會做一些魔術。驗證的正確方法是在十六進制編輯器中打開文件。 – Telemat

相關問題