我是初学者。我不知道为什么?我正在使用Code :: Blocks.Please阅读以下代码:
如果q = ' W ',则会打印出 W 。
如果q = “ W ”,则打印出 $ 。
答案 0 :(得分:4)
文字"W"
不是一个char
,而是由'W'
和'\0'
组成的以空字符结尾的字符串。
通过分配到const char*
并使用%s
const char* q = "W";
printf("%s", q);
正如评论中所指出的,您可以通过提高编译器的警告级别来捕获此类错误。
答案 1 :(得分:4)
声明
char q = "W";
获取字符串文字"W"
的地址,并将地址的值转换为char
,即地址的最低有效字节分配给{{ 1}}。
在您的情况下,c
的地址可以是例如"W"
,它被投放到0x12345624
,即0x24
。
答案 2 :(得分:2)
char q = "W";
打开警告级别,您的编译器应该抱怨这一点。 'W'
不是一个字符,它是一个字符串文字,它的类型是char [2](一个包含两个字符的数组,一个'W'和'\ 0'。)它衰减到指向它的第一个字符并转换为char
,恰好转换为'$'的ascii值。
要打印字符串文字,正确的格式说明符为%s
。