\n(換行符, Line Feed, LF) 的 ASCII 碼值為 **10** (十進制) /0x0A(十六進制) /012(八進制)。
| 轉義序列 | 名稱 | ASCII 碼 (十進制) | 十六進制 | 典型作用 |
|---|---|---|---|---|
\n | Line Feed (LF, 換行) | 10 | 0x0A | 移動到下一行行首 (Unix/Linux/macOS 文本換行標準) |
\r | Carriage Return (CR, 回車) | 13 | 0x0D | 移動到當前行行首 (Mac OS 9 及舊版 Windows 控制台) |
\r\n | CRLF (Windows 換行) | 13, 10 | 0x0D 0x0A | Windows 文本文件標準換行序列 |
\t | Horizontal Tab (水平製表) | 9 | 0x09 | 跳到下一製表位 |
\b | Backspace (退格) | 8 | 0x08 | 光標左移一位 |
\f | Form Feed (換頁) | 12 | 0x0C | 打印機換頁/終端清屏 |
"\n" 經編譯器編碼為單字節 0x0A 存入只讀數據段。printf, puts) 遇到 \n 會**自動轉換**為平台慣例:Linux/macOS 保持 0x0A,Windows 轉為 0x0D 0x0A。fopen(..., "wb")) 不轉換,原樣寫入 0x0A。\n (Linux) 或 \r\n (Windows),C 庫在文本模式下統一轉換為 \n 交給 scanf/getchar。| 誤區 | 事實 |
|---|---|
\n 是兩個字符 \ 和 n | 在字符串/字符常量中,\n 是**單一字符** (編碼 10),佔 1 字節 |
printf("\n") 等於 printf("\r\n") | 僅在 Windows 文本模式下由庫函數自動轉換,底層不同 |
ASCII 只有 128 個字符,\n 是擴展 ASCII | \n (10) 屬於標準 ASCII 控制字符 (0-31),非擴展 |
char *s = "Line1\nLine2";
for (int i = 0; s[i]; i++) {
printf("[%d]=%02X '%c'\n", i, (unsigned char)s[i], s[i] >= 32 ? s[i] : '.');
}
/* 輸出
[0]=4C 'L'
[1]=69 'i'
[2]=6E 'n'
[3]=65 'e'
[4]=31 '1'
[5]=0A '.' ← 這就是 \n (10)
[6]=4C 'L'
... */
\n ASCII 碼值為 **10**,是 C 語言與操作系統協約的「邏輯換行」字符。理解其在文本/二進制流中的平台相關轉換規則,對跨平台文件處理、網絡協議解析、嵌入式串口通訊至關重要。