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')