c - C中转义字符的大小

标签 c

为什么下面的程序会输出5?

#include <stdio.h> 
main() 
{ 
    char str[]="S\065AB"; 
    printf("\n%d", sizeof(str)); 
}

最佳答案

简答:参见 David Heffernan 的回答。

长答案:

C(99) 标准的第 6.4.4.4 节规定了“字符常量”,其中(除其他外)包括简单转义序列(例如 '\n'、'\\')、八进制转义序列(例如 '\0 ')、十六进制转义序列(例如 '\x0f')和通用字符名称(例如 '\u0112')。

您示例中的反斜杠引入了这样一个转义/八进制/十六进制/通用常量。以下八进制数字 ([0-7]) 使其成为八进制常量(十六进制为 '\x',通用为 '\u',转义序列为 '\['"?\abfnrtv]')。

一旦消耗了三个八进制数字或遇到非八进制数字,该八进制常量就会终止。

即,'\065' 等同于 '\x35' 或(十进制)53,在 ASCII 表上(巧合的是)'5' - 无论如何,一个字符。

关于c - C中转义字符的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5193372/

相关文章:

c - fgets() 在 C 中打印最后一行两次

c - 具有 void 双指针输出的函数

c - SDL+OpenGL 应用程序 : blank screen

c++ - memset 可以用于多字节类型和非零值吗

c - union 内存分配不足

c++ - 全局 const 变量的 G++ 名称修饰

c++ - 将宏名称传递给 X-Macro 列表是否合法

arrays - 可以从指针数组中的值初始化指针吗?

c++ - tensorflow c_api.h 为什么GPU比CPU慢

c - 收到以下警告 : The ABI of passing struct with a flexible array member has changed in GCC 4. 4