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