2011-06-13 140 views
4
char p[]="abc\012\0x34"; 
printf("%d\n",strlen(p)); 

我得到輸出4.不應該是3 ??? 雖然下面我得到3包含 0的字符串長度

char p[]="abc\0"; 
printf("%d\n",strlen(p)); 

回答

12

你的字符串確實包含四個大字\0之前,即abc\012

後者是一個有效的八進制轉義序列,它是十進制的10,即ASCII換行字符。

\0x34另一方面是無效八進制 - 只有\0部分是有效的,因此這是NUL終止字符串的真正結束。

4

\012是一個八進制轉義字符,而不是一個NUL其次12x終止第二個八進制字符,因此它真的是NUL。 (\x34將是一個十六進制轉義字符正確的形式。)

一個NUL字符作爲\0的表示是一個八進制的轉義序列的一種特殊情況。通常,\後面可以跟一個,兩個或三個八進制數字,以形成字符或字符串文字中的有效八進制轉義序列。

1

\012是單個字符。之後停止在\0之後(並且"x34"是另外三個字符,不包括NUL終止符)。

0

\012是八進制值(「\ n」)。

4

你的字符串具有長度4:

您代碼等價於:。 炭P [] = { 'A', 'B' 'C' '\ 012', '\ 0',」 X」, '3', '4', '\ 0'};

\ 012 - 在八進制數字系統中代碼爲12的字符(= 10中的十進制='\ n')