轉移字符----sizeof & strlen
在定義了數組大小時:
sizeof是運算符,表示編譯時分配的空間大小,即數組定義的大小,char t[20] = "sfa"。sizeof: 20; strlen: 3.
在未定義數組大小時:
sizeof根據實際位數確定,註意字符串隱藏的\0也算一位。
char s[] = "a\128\\\tcb\xdg\n";
sizeof計算s大小時,為11位:a \12 8 \\ \t c b \xd g \n \0
strlen計算s大小時,為10位:strlen計算字符串長度時遇\0結束,但大小計算不包括\0
char a[] = "a0\0a0\0";
sizeof(a)大小為7,即:a 0 \0 a 0 \0 \0
strlen(a)大小為2
char s[] = "a\128\\\tcb\xdg\n"; 打印字符數組s:轉義字符:
\yyy : 1~3位八進制數所代表的任意字符,其中y的範圍是0~7
\xyy : 1~2位十六進制所代表的任意字符,其中y的範圍是0~F
for (int i = 0; i < sizeof(s); i++) { printf("%c", s[i]); } a 8\ cb g
\12 : 2位八進制數,十進制10,控制字符LF,表示換行,換到下一行開始
\\ :表示 \
\t : 表示水平制表,即一個TAB
\xd: 1位十六進制數,十進制13,控制字符CR,表示回車
註意轉譯字符 八進制和十六進制的問題:
char s[] = "a\12345b\x1221g\xay";
八進制最多選3位,即\123,當該八進制數轉化為十進制後大於ASCII碼表最大值127時,是一個亂碼。
十六進制最多選兩位,但截取\x後的整數的最後2位處理,前面的位數丟棄,即截斷,即丟棄12,十六進制\x21,十進制33表示!
所以長度計算中:
sizeof是10位,即:a \123 4 5 b \x21 g \xa y \0
strlen是9位,即:a \123 4 5 b \x21 g \xa y
轉移字符----sizeof & strlen