C中转义字符的大小

时间:2011-03-04 11:54:06

标签: c

为什么以下程序输出5?

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

2 个答案:

答案 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