使用 int 变量作为 char 变量可以吗?
is using int variables as char variables OK?
所以我的问题是为什么有些人将 int 变量用作 char 变量。
例子
int main()
{
int i;
scanf("%c",&i);
printf ("%c",i);
}
提前致谢
这个-
scanf("%c",&i);
传递了错误的参数(%c
需要 char 的地址)。它调用了未定义的行为。
C的char
是整型。它的(数字)值最常用于表示字符,但这是另一回事。
您可以安全地使用类型 int
的变量来保存类型 char
范围内的值。您可以将 char
分配给 int
或将 char
传递给需要 int 的函数,既不进行强制转换也不更改值。
在某些地方,有意使用int
来代替char
来表示字符。典型情况可能是标准库的 getc()
、fgetc()
和 getchar()
函数,它们需要 int
的范围才能表示 EOF
除了每个可能的 char
值。此外,由于历史原因,其他一些函数声明 int
参数以接受预期类型为 char
的数据; memset()
是其中最著名的一个。
另一方面,指向int
和char
的指针不能互换。正如其他人指出的那样,您的 scanf()
调用因此产生了未定义的行为。
一般来说,您应该使用 char
而不是 int
来表示字符数据,除非有一个很好的、外部驱动的理由不这样做(例如需要处理 return getchar()
的值)。更一般地说,正确匹配数据类型,仔细考虑允许执行类型转换的位置。
所以我的问题是为什么有些人将 int 变量用作 char 变量。 例子
int main()
{
int i;
scanf("%c",&i);
printf ("%c",i);
}
提前致谢
这个-
scanf("%c",&i);
传递了错误的参数(%c
需要 char 的地址)。它调用了未定义的行为。
C的char
是整型。它的(数字)值最常用于表示字符,但这是另一回事。
您可以安全地使用类型 int
的变量来保存类型 char
范围内的值。您可以将 char
分配给 int
或将 char
传递给需要 int 的函数,既不进行强制转换也不更改值。
在某些地方,有意使用int
来代替char
来表示字符。典型情况可能是标准库的 getc()
、fgetc()
和 getchar()
函数,它们需要 int
的范围才能表示 EOF
除了每个可能的 char
值。此外,由于历史原因,其他一些函数声明 int
参数以接受预期类型为 char
的数据; memset()
是其中最著名的一个。
另一方面,指向int
和char
的指针不能互换。正如其他人指出的那样,您的 scanf()
调用因此产生了未定义的行为。
一般来说,您应该使用 char
而不是 int
来表示字符数据,除非有一个很好的、外部驱动的理由不这样做(例如需要处理 return getchar()
的值)。更一般地说,正确匹配数据类型,仔细考虑允许执行类型转换的位置。