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