所以我的问题是为什么有些人使用int变量作为char变量。 例如
int main()
{
int i;
scanf("%c",&i);
printf ("%c",i);
}
提前谢谢
答案 0 :(得分:4)
C' s char
是整数类型。它的(数字)值通常用于表示字符,但这是一个单独的问题。
您可以安全地使用int
类型的变量来保存类型char
范围内的值。您可以将char
分配给int
或将char
传递给期望int的函数,两者都没有强制转换,也不会更改值。
在某些地方,有意使用int
而不是char
来表示字符。规范案例可能是标准库的getc()
,fgetc()
和getchar()
函数,它们需要int
的范围才能表示{{} 1}}除了每个可能的EOF
值。此外,由于历史原因,一些其他函数声明char
参数以接受期望为int
类型的数据; char
是众所周知的其中之一。
另一方面,{em>指针到memset()
和int
不可互换。正如其他人所指出的,由于这个原因,您的char
调用会产生未定义的行为。
一般来说,您应该使用scanf()
而不是char
来表示字符数据,除非有一个好的,外部驱动的理由(例如需要处理{的返回值) {1}})。更一般地说,正确匹配数据类型,故意考虑允许执行类型转换的位置。
答案 1 :(得分:2)
这 -
scanf("%c",&i);
传递了错误的参数(%c
期望char的地址)。它调用未定义的行为。