You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C字符串字面量中\x十六进制转义解析异常,如何保留后续字符B?

问题解决方法

核心原因

C语言中,\x 开头的十六进制转义序列是贪婪匹配的:它会持续读取后续所有属于十六进制范畴的字符(0-9、a-f、A-F),直到碰到非十六进制字符才停止。所以你写的 \x01B 里,B 是合法的十六进制字符(对应十进制11),编译器会把 \x01B 整体解析为十六进制值 0x1B(ESC控制字符),而非 0x01 加字符 B。

可行的解决方式

  • 拆分字符串字面量:利用C语言中相邻字符串自动拼接的特性,把转义序列和后续字符拆成两个独立的字符串:

    char *a = "A\x01" "B";
    

    这样 \x01 后面没有后续的十六进制字符,B 会被当作单独的字符处理,最终字符串就是 A + 0x01 + B。

  • 改用八进制转义序列:八进制转义以 \ 开头,最多读取3个八进制数字(0-7),而 B 不属于八进制字符,所以会自动终止转义:

    char *a = "A\001B";
    

    这里 \001 是八进制表示的1,对应十六进制 0x01,后面的 B 会被解析为单独字符。

  • 手动初始化字符数组:直接指定每个字符的ASCII值,完全避免转义序列的歧义:

    char a[] = {'A', 0x01, 'B', '\0'};
    

    这种方式最直观,每个字符的含义清晰,不会有解析歧义。

内容的提问来源于stack exchange,提问作者exebook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:05:29