C语言字符串包含控制字符的一些问题
今天遇到个小问题,记录一下。
在c语言中,char * a="abc\x61def" 这个字符串占多少字节?
这不是很简单吗?abc = 3byte,\x61 = 1byte, def = 3byte, 再加结尾的一个字节,这不一共8字节吗?
其实这就是c语言字符串16进制转义的一个坑,或者说不聪明的地方,在16进制转义中,并不限制位数,也就是说 \x1234567=\x67, 前面的部分都被忽略了,这个a字符串,最后就变成了abc\xef, 也就是5个字节。
如果想要一个8个字节发字符串怎么办?
方法一,把需要转义的换成8进制
char * a="abc\141def" ,141(8)=61(16), 在C语言中,8进制被限制为3位,不会存在上述问题。
方法二,把需要转义的部分分开
char * a="abc\x61" "def", 或者char * a="abc" "\x61" "def", 这样写就会得到8字节的字符串了。
在C语言中,预处理是第 4 阶段,十六进制转义序列在第 5 阶段转换,字符串文字连接在第 6 阶段完成。所以可以用上面的方法。