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

标签 c string-literals

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

"foo \x61 \042 baa"

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

最佳答案

字符串中(或不在,就此而言)中的所有字符都只是数字。在 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}

关于c - 如何处理字符串文字中的转义值(如\nnn、\xnn)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006060/

相关文章:

无法使用 sqlite3_bind_text 插入数据库

c++ - 从共享库和加密 key 中剥离符号

将 Bash 脚本转换为 C。这可能吗?

sql - postgres 列 "X"不存在

string - 如何从 Rust 中的文字创建格式化字符串?

c - 一维位于 [1] 的二维数组

python - 嵌入 Python : No module named site

c - 一种在 C 中自动将字符串文字转换为 `unsigned char*` 的方法?

c - 动态内存分配和指针相关概念疑惑

C++:仅接受字符串文字的构造函数