如何在字符串文字中处理转义值(如\ nnn,\ xnn)?

时间:2013-06-09 03:13:18

标签: c string-literals

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

"foo \x61 \042 baa"

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

1 个答案:

答案 0 :(得分:3)

字符串中的所有字符(或不存在)都只是数字。在c中,字符串存储为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}