-1

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


在此处输入图像描述
在此处输入图像描述
在此处输入图像描述
在此处输入图像描述



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

4

3 回答 3

4

文字"W"不是单个,而是由和char组成的以空字符结尾的字符串。'W''\0'

通过分配给 aconst char*并使用打印来获得所需行为的一种方法%s

const char* q = "W";
printf("%s", q);

正如评论中所指出的,您可以通过提高编译器的警告级别来捕获此类错误。

于 2012-10-17T06:35:40.070 回答
4

陈述

char q = "W";

接受字符串字面量的地址,并将地址的值"W"转换为,即,将地址的最低有效字节分配给。charc

在您的情况下,的地址"W"可能是 eg 0x12345624,并且它被转换为0x24,即'$'

于 2012-10-17T06:40:38.080 回答
2
char q = "W";

打开警告级别,你的编译器应该抱怨这个。'W'不是一个字符,它是一个字符串文字,它的类型是 char[2](两个字符的数组,一个 'W' 和 '\0'。)它衰减到指向它的第一个字符的指针,然后转换为char,恰好转换为'$'的ascii值。

要打印字符串文字,正确的格式说明符是%s.

于 2012-10-17T06:36:06.787 回答