我是初学者。我不知道为什么?我正在使用 Code::Blocks。请阅读以下代码:
如果 q= ' W ',它会打印出W。
如果 q= " W ",它会打印出$。
我是初学者。我不知道为什么?我正在使用 Code::Blocks。请阅读以下代码:
如果 q= ' W ',它会打印出W。
如果 q= " W ",它会打印出$。
文字"W"
不是单个,而是由和char
组成的以空字符结尾的字符串。'W'
'\0'
通过分配给 aconst char*
并使用打印来获得所需行为的一种方法%s
const char* q = "W";
printf("%s", q);
正如评论中所指出的,您可以通过提高编译器的警告级别来捕获此类错误。
陈述
char q = "W";
接受字符串字面量的地址,并将地址的值"W"
转换为,即,将地址的最低有效字节分配给。char
c
在您的情况下,的地址"W"
可能是 eg 0x12345624
,并且它被转换为0x24
,即'$'
。
char q = "W";
打开警告级别,你的编译器应该抱怨这个。'W'
不是一个字符,它是一个字符串文字,它的类型是 char[2](两个字符的数组,一个 'W' 和 '\0'。)它衰减到指向它的第一个字符的指针,然后转换为char
,恰好转换为'$'的ascii值。
要打印字符串文字,正确的格式说明符是%s
.