您的位置:首页 > 其它

[C]转义字符的探究

2019-05-20 23:06 127 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/ranjiahao_study/article/details/90384178

转义字符顾名思义就是转变意思的字符
有这样一组代码

printf("%lu\n", strlen("\377"));  // 1
printf("%lu\n", strlen("\378"));  // 2
printf("%lu\n", strlen("\387"));  // 3
printf("%lu\n", strlen("\0377")); // 2
printf("%lu\n", strlen("\0378")); // 2
printf("%lu\n", strlen("\0387")); // 3
printf("%lu\n", strlen("\0837")); // 0

显然我们用strlen计算长度输出结果往往不是那么直白,所以我们借助linux系统的vim代码高亮来观察这一现象

我们可以清楚的看到这之间的区别,strlen中粉色部分成了一个单独的字符,那么问题来了,为什么会产生这样的结果?我们知道一个字节8个bit最大能表示范围为:0~255,而\ddd的意思是1到3位八进制数所代表的任意字符,最大范围是0~377(八进制)所以\377在范围之内,编译器就认为它是一个字符;
因为八进制中没有8,所以\378就被当成’\37’和’8’两个字符;
同理,\387表示’\3’ ‘8’ ‘7’三个字符;
\0377表示’\037’ ‘7’两个字符;
\0378表示’\037’ ‘8’两个字符;
\0387表示’\03’ ‘8’ ‘7’三个字符
需要注意的是最后一个\0837由于第二个数字是8所以第一个字符是’\0’,刚好是字符串结尾的标志,strlen的输出出结果就是0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: