全部问题 > 当前问题

这个运行答案怎么是5

#include <stdio.h>

main()

{char *s2="123\078\0xa";

 printf("%d",strlen(s2));

}


小青年 2015-9-15 16:53:54

共 7 个回答

祁老师 2015-9-15 17:03:18

这里的字符\07是一个八进制的转义字符 算作一个字符 后面的8算作一个  所以就是5个

最佳答案

嘿嘿大人 2015-9-15 17:04:02

#include <stdio.h>

#include<string.h>


main()


{char *s2="123\078\0xa";


 printf("%d",strlen(s2));


}

蓝色的是八进制的转义字符,每个颜色算一个字符,遇到最后那个‘\0’为结束,

关于如何判断是不是八进制,\0后面的数不能超过7,所以最后那个\0表示的是字符串结束


小青年 2015-9-16 14:24:48

回复 嘿嘿大人:这个老师没讲过啊

嘿嘿大人 2015-9-16 14:25:54

回复 小青年:讲过的,但是当时讲的是一个三位的八进制转义,所以前面没有0,他特别说八进制不能写0;

2. 八进制转义字符

它是由反斜杠'/'和随后的1~3个八进制数字构成的字符序列。例如,'/60'、'/101'、'/141'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。

字符集中的所有字符都可以用八进制转义字符表示。

如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。

3. 十六进制转义字符

它是由反斜杠'/'和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'/x30'、'/x41'、'/X61'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的十六进制值分别为0x30、0x41和0x61。

可见,字符集中的所有字符都可以用十六进制转义字符表示。


小青年 2015-9-16 14:27:49

回复 嘿嘿大人:我知道了  嘿嘿大人真厉害 谢谢

嘿嘿大人 2015-9-16 14:31:14

回复 小青年:八进制在不是转义字符的时候必须要加0,十六进制也是要加上最开始0,分清楚哦,加油吧,嘿嘿

嘿嘿大人 2015-9-16 14:33:18

回复 小青年:转义字符中只能使用小写字母,每个转义字符只能看作一个字符。

问题来自: 编程题真题