“printf ("%d\n",strlen("ats\n012\1\\"))”的输出结果 C语言字符串问题

“printf ("%d\n",strlen("ats\n012\1\\"))”的输出结果为9 ;而
printf("%d\n",strlen("s\n\016\0end"))输出结果为3 是因为把016看成是三位八进制转义序列,所以只占一个长度。那么在“printf ("%d\n",strlen("ats\n012\1\\"))中 为什么012就占了三个长度呢?

在字符串中,反斜杠是转义符,所以第一个字符串\\长度是1,\n是长度也是1
第二个字符串中,"\016","\0"都被认为是一个字符,所以长度是3(\0标记结束,后面忽略),
而在解析第一个字符串的时候\n已经被解析完毕,012被认为是字符串内容,而不是转译内容了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-05
printf ("%d\n",strlen("ats\n012\1\\")),\n代表回车,后面的0、1、2各自表示一个字符,所以占3个长度
第2个回答  2013-09-05
printf("%d\n",strlen("s\n\016\0end"))输出结果为3
是因为遇到 \0 字符串就结束了,所以3
“printf ("%d\n",strlen("ats\n012\1\\"))
中0 1 2 都代表符号自己追问

能帮忙解释一下为什么可以把016看作八进制数,而不能把012看成八进制吗?

追答

八进制要以 \开头,后面是 1到3位数字

不用\开头是不能看成八进制的

本回答被网友采纳
第3个回答  2013-09-05
012没有\所以是3啊。追问

就是说要想把012看成八进制数的话必须是\012\的形式吗

追答

对。最后的\不能用的

相似回答