【发布时间】:2019-12-24 16:37:16
【问题描述】:
考虑这个 C 程序:
unsigned char c2 = '\0101';
printf("%c, %d\n", c2, c2);
我认为输出应该是:A 65,但实际输出是1 49。
推理:0作为字符常量中的前缀以八进制格式声明,八进制值101是65。那么65对应的ASCII值是A。有人能告诉我哪里出错了吗?我尝试了与 '\x41' 相同的十六进制代码,它给出了所需的输出。
【问题讨论】:
-
我不知道你是否注意到 btw,如果你删除 0 (\101),你会得到想要的输出
-
@user3121023 八进制 escape 序列。八进制文字没有这个限制。
-
@Archer unsigned char c2 = 0101 作品
-
因为语法是
0x41 -
请注意,在
'\xA74129'中,有三个字节的十六进制;与八进制不同,构成十六进制转义\xXXX的十六进制字符的数量没有限制。也没有要求十六进制转义中的字符数是偶数。请参阅 C11 §6.4.4.4 Character constants,其中明确指定了 1 到 3 个八进制数字和不受限制的十六进制。