欢迎光临散文网 会员登陆 & 注册

C语言字符串包含控制字符的一些问题

2022-11-17 11:53 作者:章鱼萝卜猫  | 我要投稿

今天遇到个小问题,记录一下。

在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 阶段完成。所以可以用上面的方法。

C语言字符串包含控制字符的一些问题的评论 (共 条)

分享到微博请遵守国家法律