包含\ 0的字符串长度

时间:2011-06-13 06:43:35

标签: c++ c

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

我得到输出4.不应该是3 ??? 虽然接下来我得到了3。

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

5 个答案:

答案 0 :(得分:12)

您的字符串 \0之前包含四个字符,即abc \012

后者是一个有效的八进制转义序列,十进制10,即ASCII换行符。

另一方面,

\0x34不是有效的八进制 - 只有\0部分有效,因此这是你的NUL终止字符串的真实结束。

答案 1 :(得分:4)

\012是八进制转义字符,而非NUL后跟12x终止第二个八进制字符,因此它真的是NUL。 (\x34将是十六进制转义字符的正确形式。)

NUL字符表示为\0只是八进制转义序列的特例。通常,\后面可以跟一个,两个或三个八进制数字,以在字符或字符串文字中形成有效的八进制转义序列。

答案 2 :(得分:4)

你的字符串长度为4:

您的代码相当于:     char p [] = {'a','b'。'c'。'012','\ 0','x','3','4','\ 0'};

\ 012 - 八进制数字系统中代码为12的字符(=十进制= 10 ='\ n')

答案 3 :(得分:1)

\012是一个单一字符。它之后停在\0上("x34"还有三个字符,不包括NUL终结符。)

答案 4 :(得分:0)

\012是八进制值(“\ n”)。