char p[]="abc\012\0x34";
printf("%d\n",strlen(p));
我得到輸出4.不應該是3 ??? 雖然下面我得到3包含 0的字符串長度
char p[]="abc\0";
printf("%d\n",strlen(p));
char p[]="abc\012\0x34";
printf("%d\n",strlen(p));
我得到輸出4.不應該是3 ??? 雖然下面我得到3包含 0的字符串長度
char p[]="abc\0";
printf("%d\n",strlen(p));
你的字符串確實包含四個大字\0
之前,即abc
和\012
。
後者是一個有效的八進制轉義序列,它是十進制的10,即ASCII換行字符。
\0x34
另一方面是無效八進制 - 只有\0
部分是有效的,因此這是NUL終止字符串的真正結束。
\012
是一個八進制轉義字符,而不是一個NUL
其次1
和2
。 x
終止第二個八進制字符,因此它真的是NUL
。 (\x34
將是一個十六進制轉義字符正確的形式。)
一個NUL
字符作爲\0
的表示是一個八進制的轉義序列的一種特殊情況。通常,\
後面可以跟一個,兩個或三個八進制數字,以形成字符或字符串文字中的有效八進制轉義序列。
\012
是單個字符。之後停止在\0
之後(並且"x34"
是另外三個字符,不包括NUL終止符)。
\012
是八進制值(「\ n」)。
你的字符串具有長度4:
您代碼等價於:。 炭P [] = { 'A', 'B' 'C' '\ 012', '\ 0',」 X」, '3', '4', '\ 0'};
\ 012 - 在八進制數字系統中代碼爲12的字符(= 10中的十進制='\ n')