考虑这个 C 程序:
unsigned char c2 = '\0101';
printf("%c, %d\n", c2, c2);
我相信输出应该是:A 65但实际输出是1 49.
推理:字符常量中以 0 作为前缀,声明为八进制格式,而 101 的八进制值为 65。那么 65 对应的 ASCII 值为 A。有人能告诉我哪里出错了吗?我尝试了与“\x41”相同的十六进制代码,它给出了所需的输出。
八进制格式字符的转义序列是一个反斜杠,后跟最多三位数字,这意味着最后一个数字不是转义序列的一部分。这是在第 6.4.4.4p1 节中指定的C标准 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf关于“字符常量”:
octal-escape-sequence:
\ octal-digit
\ octal-digit octal-digit
\ octal-digit octal-digit octal-digit
So '\0101'
实际上是一个多字节字符常量:第一个是\010
这是值 8,第二个是字符'1'
.
领先的0
用于指定一个numeric八进制常数,不是特点八进制常量,因此在这种情况下不需要前导 0:
unsigned char c2 = '\101';
如果您确实想使用数字八进制常量,您可以这样做:
unsigned char c2 = 0101;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)