0

如何处理字符串文字中的转义值(如 \nnn、\xnn)?考虑

"foo \x61 \042 baa"

是否转换为十进制并存储在内存位置\x61\042并被翻译成"foo 97 34 baa"如果是这样,这是在编译时吗?它适用于所有转义字符吗?如果不这样做,C编译器如何处理?

4

1 回答 1

3

字符串中(或不在其中)的所有字符都只是数字。在 ca 中,字符串存储为 8 位数字数组,末尾有 0 表示字符串的结尾(“空终止符”)。转义序列的处理方式与常规字符完全相同:它们的 ascii 值存储在数组中。在您的示例中,以下内容相同:

"foo \x61 \042 baa"
"foo a \" baa"

{ 'f',  'o',  'o',  ' ', '\x61',  ' ', '\042',  ' ',  'b',  'a',  'a', '\0'}
{ 'f',  'o',  'o',  ' ',    'a',  ' ',    '"',  ' ',  'b',  'a',  'a', '\0'}
{ 'f',  'o',  'o',  ' ',   0x61,  ' ',    042,  ' ',  'b',  'a',  'a', '\0'}
{0x66, 0x6f, 0x6f, 0x20,   0x61, 0x20,   0x22, 0x20, 0x62, 0x61, 0x61,  0x0}
{ 102,  111,  111,   32,     97,   32,     34,   32,   98,   97,   97,    0}
{0146, 0157, 0157,  040,   0141,  040,    042,  040, 0142, 0141, 0141,    0}
于 2013-06-09T03:31:44.863 回答