'W'打印出W,“W”打印出$。为什么?

时间:2012-10-17 06:32:48

标签: c++ c codeblocks

我是初学者。我不知道为什么?我正在使用Code :: Blocks.Please阅读以下代码:

enter image description here
enter image description here
enter image description here
enter image description here



如果q = ' W ',则会打印出 W
如果q = W ,则打印出 $

3 个答案:

答案 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