#include <stdio.h>
int main(void)
{
char username;
username = '10A';
printf("%c\n", username);
return 0;
}
我刚开始学习C,这是我的第一个问题。为什么这个程序给我2个警告(多字符常量,隐式常量转换溢出)?
而不是将10A
作为输出,而是仅提供A
。
答案 0 :(得分:4)
您正在尝试将多个字符填充到一组''
和一个char
变量中。对于字符串文字,您需要""
,并且您需要一个字符数组来保存字符串。要打印字符串,请使用%s
。
将所有这些放在一起,你得到:
#include <stdio.h>
int main(void)
{
char username[] = "10A";
printf("%s\n", username);
return 0;
}
<强>脚注强>
以下关于多字符常量的评论中的Jonathan Leffler:
请注意,多字符常量是C的一部分(因此是警告,而不是错误),但多字符常量的值是实现定义的,因此不可移植。它是一个整数值;它大于适合char,所以你得到那个警告。你可能已经得到了几乎任何东西作为输出 - 1,A和一个空字节都可能是合理的。
答案 1 :(得分:1)
'10A'
是一种允许但不明确的定义值的方法。
如果是int
变量,
int username = '10A';
printf("%x\n", username);
将输出
313041
这些是十六进制值对 - 每对都是
0x31
是您输入的'1'
。
0x30
是您输入的'0'
。
0x41
是您输入的'A'
。
但是char
类型无法解决此问题。
答案 2 :(得分:1)
在C中没有String对象。相反,字符串是字符数组(后跟空字符)。其他答案已经指出静态分配这个内存。但是我建议动态分配字符串。记住C缺少一个垃圾内存收集器(就像在java中一样)。所以记得释放你的指针。玩得开心!!
答案 3 :(得分:0)
您可以使用char *username
指向地址的开头并在之后循环通过内存。例如,使用sizeof(username)
来获取大小,然后循环printf,直到您在用户名中打印了字符数量。但是,如果你不小心,你可能会遇到重大问题......