char p[]="abc\012\0x34";
printf("%d\n",strlen(p));
我得到输出4.不应该是3 ??? 虽然接下来我得到了3。
char p[]="abc\0";
printf("%d\n",strlen(p));
答案 0 :(得分:12)
您的字符串 在\0
之前包含四个字符,即abc
和 \012
。
后者是一个有效的八进制转义序列,十进制10,即ASCII换行符。
另一方面, \0x34
不是有效的八进制 - 只有\0
部分有效,因此这是你的NUL终止字符串的真实结束。
答案 1 :(得分:4)
\012
是八进制转义字符,而非NUL
后跟1
和2
。 x
终止第二个八进制字符,因此它真的是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”)。