为什么下面的程序会输出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/