如何在字符串文字中处理转义值(如\ nnn,\ xnn)?考虑
"foo \x61 \042 baa"
\x61
和\042
是否转换为十进制基数并存储在内存位置?并且如果是,则翻译为"foo 97 34 baa"
,这是在编译时吗?它适用于所有转义字符吗?如果不这样,C编译器如何处理?
答案 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}