转义字符顾名思义就是转变意思的字符
有这样一组代码
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计算长度输出结果往往不是那么直白,所以我们借助代码高亮来观察
我们可以清楚的看到这之间的区别,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