【发布时间】:2017-11-30 10:46:50
【问题描述】:
可以将像"foo" "\x01" "bar" 这样的字符串常量写为单个字符串文字(同时保持十六进制表示法)吗?对于"foo\x01bar",转义序列似乎被解释为\x01ba,因为我收到警告“十六进制转义序列超出范围”。
【问题讨论】:
标签: c
可以将像"foo" "\x01" "bar" 这样的字符串常量写为单个字符串文字(同时保持十六进制表示法)吗?对于"foo\x01bar",转义序列似乎被解释为\x01ba,因为我收到警告“十六进制转义序列超出范围”。
【问题讨论】:
标签: c
"foo" "\x01" "bar" 是一个字符串字面量。
C 标准规定十六进制转义序列是可以构成转义序列的最长字符序列。如果没有显式连接(这是解决此问题的常见解决方法),编译器会解析 \x01ba,这显然超出了范围。
【讨论】:
\x之后的任意数量的有效十六进制数字。与此相反,octal-escape-sequence (\001) 运行不超过三个八进制数字(6.4.4.4 字符常量)。所以,不,要么你需要用十六进制表示法“玩花样”,要么你选择八进制(一旦你习惯了它就不会那么坏)。
"foo\x01\142ar" 怎么样?这是作弊吗?
【讨论】:
另一种解决方案是简单地将转义字符写成八进制,而不是十六进制
"foo\1bar"
不要再模棱两可了……
【讨论】:
\001)