首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言轉義字符 \r 詳解:回車 vs 換行,跨平台換行陷阱

     編輯:C 語言問答

核心定義

轉義符名稱ASCII作用
\r (CR)Carriage Return 回車0x0D (13)光標移至**行首**,不換行
\n (LF)Line Feed 換行0x0A (10)光標移至**下一行**,不歸行首
\r\n (CRLF)回車換行0x0D 0x0A**真正的換行**:歸行首 + 下一行

歷史由來

  • 機械打字機:回車推動滾筒歸位,換行**卷紙上移一行;
  • Unix/Linux/macOS (OS X+):約定 \n 即換行,內核終端驅動自動補 \r;
  • Windows/DOS:沿用 CP/M 約定 \r\n 為換行;
  • 經典 Mac OS (9 及之前):\r 為換行。

C 語言標準行為

  • 文本模式 (`fopen("r"/"w")`):
    - 讀取:自動將平台換行序列轉為 \n;
    - 寫入:自動將 \n 轉為平台換行序列 (Windows→\r\n, Unix→\n);
  • 二進制模式 (`fopen("rb"/"wb")`):**無任何轉換**,原始字節流。

實戰陷阱與對策

場景問題解決
Windows 讀 Unix 文件行末無 \r,某舊版工具顯示混亂用 Notepad++/VS Code 轉換換行格式,或 dos2unix/unix2dos
網絡協議 (HTTP/SMTP)規範要求 \r\n,只發 \n 導致解析失敗硬編碼 "\r\n" 或用庫函數
嵌入式串口調試終端只識別 \r\nprintf("OK\r\n") 而非 printf("OK\n")
Git 跨平台協作提交混雜換行符.gitattributes: * text=auto eol=lf 強制倉庫存 LF,檢出按平台轉換
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved