请教一条C++ :执行以下程序段后的输出结果是(7)

请问为什么?执行以下程序段后的输出结果是(7);
char a[ ]="\t\018\\\"12";
printf(“%d”,strlen(a));

第1个回答  推荐于2016-06-09
可以这样阅读:
1------>\t
2------>\01 \后面如果是数字的话,每两个表示一个字符,除非遇到了非16进制数字
3------>8
4------>\\
5------>\"
6------>1
7------->2追问

谢谢

但还有一些问题要请教:

    是非8进制数字吧

    \01和\1有区别吗

    \\(和\“)为什么要合起来算一个字符

追答

1、确实是8进制
2、\01和\1没有区别,除非1后面还有小于8的数字
3、\是一个转义词,\带的字符将会被转义,通常后面是时候就是转义成什么,如\\表示\,\"表示"

本回答被提问者采纳
第2个回答  2014-08-07
\t
\01
8
\\
\"
1
2

是这么区分的,为什么\018,不解释成\0 18,是这么来的,如果\0后跟[0-7][0-7]是会被优先解释成8进制的,如果\0a \08前面的\0就会成为结束符。追问

12为什么要拆成1和2,而不能直接当做十进制里的12

追答

因为你已采纳,所以不再回答

第3个回答  2014-08-07
1 2 3 4 5 6
\t \018 \\ \" 1 2
再加上结尾的\0,因而该字符串长度为7
第4个回答  2014-08-07
就是7个字符啊:
\t
\01
8
\\
\"
1
2
第5个回答  2014-08-07
\t
\01
8
\\
\"
1
2
一共是7个