C語言字符串包含控制字符的一些問題
今天遇到個小問題,記錄一下。
在c語言中,char * a="abc\x61def" 這個字符串占多少字節(jié)?
這不是很簡單嗎?abc = 3byte,\x61 = 1byte, def = 3byte, 再加結(jié)尾的一個字節(jié),這不一共8字節(jié)嗎?
其實這就是c語言字符串16進(jìn)制轉(zhuǎn)義的一個坑,或者說不聰明的地方,在16進(jìn)制轉(zhuǎn)義中,并不限制位數(shù),也就是說 \x1234567=\x67, 前面的部分都被忽略了,這個a字符串,最后就變成了abc\xef, 也就是5個字節(jié)。
如果想要一個8個字節(jié)發(fā)字符串怎么辦?
方法一,把需要轉(zhuǎn)義的換成8進(jìn)制
char * a="abc\141def" ,141(8)=61(16),?? 在C語言中,8進(jìn)制被限制為3位,不會存在上述問題。
方法二,把需要轉(zhuǎn)義的部分分開
char * a="abc\x61" "def", 或者char * a="abc" "\x61" "def", 這樣寫就會得到8字節(jié)的字符串了。
在C語言中,預(yù)處理是第 4 階段,十六進(jìn)制轉(zhuǎn)義序列在第 5 階段轉(zhuǎn)換,字符串文字連接在第 6 階段完成。所以可以用上面的方法。
標(biāo)簽: