1 字元定義
ascii碼 符號 字元縮寫(全稱) 中文名稱
13 \r cr (carriage return) 回車
10 \n lf (nl line feed, new line) 換行
cr:本義是游標定位到行首(本行),即carriage return,\r,n表示return
假設定義
對於windows/unix/linux等主流作業系統,在文字讀寫時,鍵盤的回車鍵(enter鍵)等同於:換行+回車。
2 差異測試
文字讀寫時,\r和\n在各主流作業系統的差異:
windows系統: \r\n表示換行+回車
例1:
假如通過程式向檔案test.txt從首行寫入字串行:\naaa\r\nbb\nb\rccc
那麼,通過程式按字元的ascii碼讀取文字內容的結果:1097979713109898109813999999
使用記事本開啟test.txt,文字內容如下:
aaabbbccc(此處為游標終點位置)
可見,windows系統\r\n表示回車+換行,單獨的\r或\n在記事本中的顯示為不佔位的空字串,不會控制游標的移動。
例2:假如通過程式向檔案test.txt從首行寫入字串行:\naaa\r\nbb\nb\rccc\r
那麼,通過程式按字元的ascii碼讀取文字內容的結果:109797971310989810981399999913
使用記事本開啟test.txt,文字內容如下:
aaabbbccc(此處為游標終點位置)
可見,\r始終顯示為不佔位的空字串,無論是在文字的末尾或中間。
例3:假如通過程式向檔案test.txt從首行寫入字串行:\naaa\r\nbb\nb\rccc\n
那麼,通過程式按字元的ascii碼讀取文字內容的結果:109797971310989810981399999910
使用記事本開啟test.txt,文字內容如下:
aaabbbccc
(此處為游標終點位置)
可見,對於win的記事本,當\n在文字末尾時,游標跳到了下一行行首(回車+換行),而文字中間的\n不會。
總結
a.windows平台,\r\n表示換行+回車
b.單獨\r僅表示不佔位的ascii字元(空字元),不控制游標的移動;
c.單獨\n僅表示不佔位的ascii字元(空字元),不控制游標的移動;
但當\n位於文字內容的末尾時,對於win的記事本,游標會跳到下一行行首,否則\n不控制游標的移動,求大神解釋原因!
unix和linux系統: \n表示換行+回車
例1:
假如通過程式向檔案test從首行寫入字串行:aaa\n\rbbb\rccc
那麼,通過程式按字元的ascii碼讀取文字內容的結果:979797101398989813999999
[root@localhost opt]vi test
aaa^mbbb^mccc ~
[root@localhost opt]cat test
aaaccc[root@localhost opt]#
可見,\n代表回車+換行,\r在linux文字編輯器顯示為^m,\r在linux檔案讀取命令cat控制游標移到到本行行首(本義)
例2:假如在例1字串行後追加乙個\n
通過程式向檔案test從首行寫入字串行:aaa\n\rbbb\rccc\n
那麼,通過程式按字元ascii碼讀取文字內容的結果:97979710139898981399999910
[root@localhost opt]vi test
aaa^mbbb^mccc ~
說明:對於vi,\n也是換行+回車, 但在字串行末尾為時,因vi游標顯示問題,效果不明顯,導致看似和例1一樣
[root@localhost opt]cat test
aaaccc
[root@localhost opt]#
例3:假如在例2字串行後再追加乙個\n
通過程式向檔案test從首行寫入字串行:aaa\n\rbbb\rccc\n\n
那麼,通過程式按字元ascii碼讀取文字內容的結果:9797971013989898139999991010
[root@localhost opt]vi test
aaa^mbbb^mccc
~[root@localhost opt]# cat test
aaaccc
[root@localhost opt]#
總結
a.linux系統中,\n表示換行+回車
b.對於linux的文字編輯器vi,\r顯示為^m
c.對於linux的文字讀取和顯示命令cat,\r控制游標移動到行首(較好地詮釋了\r的意義)
mac: \r表示換行+回車
mac系統沒有做相關測試,有興趣的可以自己測試。
3 字元歷史(引用)
在計算機還沒有出現之前,有一種叫做電傳打字機(teletype model 33)的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。
於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。乙個叫做「回車」,告訴打字機把列印頭定位在左邊界;另乙個叫做「換行」,告訴打字機把紙向下移一行。
這就是「換行」和「回車」的來歷,從它們的英語名字上也可以看出一二。
後來,計算機發明了,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加乙個就可以。於是,就出現了分歧。
/************************************===*/
\n: unix 系統行末結束符
\r\n: window 系統行末結束符
\r: mac os 系統行末結束符
/************************************===*/
乙個直接後果是,unix/mac系統下的檔案在windows裡開啟的話,所有文字會變成一行;而windows裡的檔案在unix/mac下開啟的話,在每行的結尾可能會多出乙個^m符號。(這也是經常說見到的現象,哈哈,原來是這樣的)
c++語言程式設計時(windows系統)\r 就是return 回到 本行 行首 這就會把這一行以前的輸出 覆蓋掉
如:int main()
最後只顯示 xixi 而 hahaha 被覆蓋了
\n 是回車+換行 把游標 先移到 行首 然後換到下一行 也就是 下一行的行首拉
int main()
則 顯示
hahaha
xixi
c 文字讀寫操作詳解
引用標頭檔案 fstream 建立流物件 指定檔案及開啟方式 讀寫資料 關閉檔案 ofstream 寫操作 從記憶體向檔案中輸出資料 ifstream 讀操作 從檔案中向記憶體中輸入資料 fstream 讀寫操作 開啟方式 ios in 為讀檔案而開啟檔案 ios out 為寫檔案而開啟檔案 ios...
parc作業系統 世界6大主流作業系統回顧
前言 眾所周知,電腦都是由硬體和軟體組成的,缺了任何一樣電腦都是沒有辦法執行的。在我們使用電腦的過程中,一切的操作都是利用作業系統來完成。最早的計算機其實並沒有作業系統,在那個時候人們想要操作計算機只能通過各種 不同的操作按鈕來控制計算機,然後隨著計算機技術的不斷發展隨後就出現了彙編語 言,並將它的...
實時作業系統主流排程方法RMS
作業系統的排程方法有很多種,這裡主要介紹主流的排程演算法,像edf這種排程演算法就不表述了。目前幾乎所有的商業實時作業系統的排程理論都基於rms理論.以下是基於rms的一些假設理論 1 各個任務之間沒有資源共享,沒有忙等,沒有mutex,也沒有semaphore.2 每個任務的最後期限是週期性的。3...