为什么这个C程序打印字符2?

时间:2018-02-07 15:22:43

标签: c printf character literals

int main(void)   
{  
    char c='012';  
    printf("%c",c);  
    return 0;  
}  

为什么要打印2?

2 个答案:

答案 0 :(得分:4)

'012'是一个多字符常量,它是int类型,但具有实现定义的值。 (为避免疑义,'0'也是C中的int类型。)

如果charunsigned,那么您将获得CHAR_BIT的最不重要int位作为最终结果。如果charsigned,则intchar的转换行为将由实施定义。

在您的情况下,常量值似乎为'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,而不是零。