考虑此C程序:
unsigned char c2 = '\0101';
printf("%c, %d\n", c2, c2);
我相信输出应该是:A 65,但实际输出是1 49。
原因:0作为字符常量的前缀以八进制格式声明,八进制值为101,则值为65。然后对应于65的ASCII值为A。有人可以告诉我我要去哪里了吗?我尝试使用与'\ x41'相同的十六进制代码,它给出了所需的输出。
八进制格式的字符的转义序列是一个反斜杠,后跟最多三位数字,这意味着最后一位数字不属于转义序列的一部分。所以'\0101'
实际上是一个多字节字符常量:第一个是\010
,它是值8,后跟字符'1'
。
前导0
用于指定数字八进制常量,而不是character八进制常量,因此在这种情况下您不需要前导0:
unsigned char c2 = '\101';
如果您确实想使用数字八进制常量,则可以这样做:
unsigned char c2 = 0101;