永发信息网

c语言 字符数组中的转义字符

答案:3  悬赏:10  手机版
解决时间 2021-02-04 04:11
  • 提问者网友:末路
  • 2021-02-03 05:58
我要在一个 char数组中 做如下赋值
char data[40]="\xAA\x55dddddd\0"
编译器提示 too big for character

若是改为
char data[40]="\252\125dddddd\0"

则正常。注意 字符 \xAA=\255 \x55=\125
也就是在字符数组中的转义字符只能用八进制的吗?
最佳答案
  • 五星知识达人网友:有你哪都是故乡
  • 2021-02-03 06:10
第二个式子正确是因为 "\"后面跟数字,则系统将在0-255之间进行识别,即一个字节。 而用"\x"时系统按十六进制进行识别,这时,其最大长度为系统设定值 ,如 32位系统,最多4个字符,64位系统最多8个字符,故出错。

回到你的问题,你是希望有那样长的一个字符串。可以采用如下表示:
char data[40] = {0xaa, 0x55, "dddddd",0};
全部回答
  • 1楼网友:掌灯师
  • 2021-02-03 09:10
有13个字符。分别如下:1:\x182:\0123:'3'4:\015:\06:\x187:\08:'8'9:'q'10:'w'11:\01612:'8'13:\0 对于你的问题\012,你得看看转义字符的定义了。\ddd的一个转义字符,注意,只是一个字符,是用1-3位8进制常数来表示字符的转义字符。\0当然就算是这个转义字符了,只有1位。而\012是有3位,所以当然看成是3位的,而不会看成是1位的\0和‘1’和‘2’这3个字符了。注意\ddd中的d代表一个8进制常数位,编译器会一直读取到无法读取为止,无法读取有两种情况,一种就是后面的数字根本不是一个8进制常数位(注意8进制常数位只有0到7),比如\08这里就不是一个字符,而是两个字符了\0和‘8’,因为8不是8进制常数位。同理可知\0a,\019这些都不是一个转义字符了。第二种情况就是读取的位数达到了上限(上限是3位),比如\01234,这里就不止一个字符了,而是\012,'3','4'这个3个字符构成的字符串了。这样说你应该能明白了吧。祝学习进步~~~
  • 2楼网友:由着我着迷
  • 2021-02-03 07:34
不要把转义和不转义进行混用。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯