C中转义字符的大小

use*_*593 1 c

为什么以下程序输出5?

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

Dev*_*lar 5

简短回答:见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' - 无论如何都是单个字符.