給定宣告:
char a[] = "ab\0123\\098";
編譯器會在編譯期解析轉義序列,實際儲存於陣列的內容如下:
| 原始碼片段 | 解析結果 | 佔用位元組 |
|---|---|---|
a | 'a' | 1 |
b | 'b' | 1 |
\012 | 八進位 012 = 十進位 10 (換行符 LF) | 1 |
3 | '3' | 1 |
\\ | 反斜線 '\' | 1 |
0 | '0' | 1 |
9 | '9' | 1 |
8 | '8' | 1 |
| 隱含結尾 | '\0' | 1 |
陣列 a 總長度為 9 位元組(8 個有效字元 + 1 個結尾空字元)。
驗證程式:
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "ab\0123\\098";
printf("sizeof(a) = %zu\n", sizeof(a)); // 輸出 9
printf("strlen(a) = %zu\n", strlen(a)); // 輸出 8 (不含 \0)
return 0;
}
\012),後續數字 3 為普通字元。\\ 代表單一反斜線字元。\0,sizeof 會包含它,strlen 則不包含。