int main(void)
{
char c='012';
printf("%c",c);
return 0;
}
为什么要打印2?
答案 0 :(得分:4)
'012'
是一个多字符常量,它是int
类型,但具有实现定义的值。 (为避免疑义,'0'
也是C中的int
类型。)
如果char
为unsigned
,那么您将获得CHAR_BIT
的最不重要int
位作为最终结果。如果char
为signed
,则int
到char
的转换行为将由实施定义。
在您的情况下,常量值似乎为'0' * 256 * 256 + '1' * 256 + '2'
,将其转换为char
实际上是以256为模的结果。
答案 1 :(得分:0)
通常应该修复错误。看看我用new
选项编译它时会出现什么:
-Wall
最后一行gonczor@wiktor-papu:~/tmp$ gcc test.c -Wall -o test
test.c: In function ‘main’:
test.c:5:12: warning: multi-character character constant [-Wmultichar]
char c='012';
^~~~~
test.c:5:12: warning: overflow in implicit constant conversion [-Woverflow]
gonczor@wiktor-papu:~/tmp$ ./main
31221344gonczor@wiktor-papu:~/tmp$ echo $?
1
打印上一个命令退出状态。你可以看到它是1,而不是零。