为什么以下程序输出5?
#include <stdio.h>
main()
{
char str[]="S\065AB";
printf("\n%d", sizeof(str));
}
Run Code Online (Sandbox Code Playgroud)
简短回答:见David Heffernan的回答.
答案很长:
§64.4.4的C(99)标准规定了"字符常量",其中包括简单的转义序列(例如'\n','\\'),八进制转义序列(例如'\ 0'),十六进制转义序列(例如'\ x0f')和通用字符名称(例如'\ u0112').
示例中的反斜杠引入了这样的escape/octal/hex/universal常量.下面的八进制数字([0-7])使它成为八进制常量(十六进制为'\ x',通用为'\ u',转义序列为'\ ['"?\ abfnrtv]').
一旦消耗了三个八进制数字,或者遇到非八进制数字,该八进制常量就会终止.
即,'\ 065'相当于'\ x35'或(十进制)53,即ASCII表上的(巧合)'5' - 无论如何都是单个字符.