试图在 int 变量中存储无效的十六进制数
Trying to store invalid hexadecimal number in int variable
我有一个非常基本的疑问。我试图将任何无效的十六进制数存储在一个 int 变量中。我所说的无效数字是指使用不在 A-F
范围内的字母表的数字。例如看这个程序:
#include<stdio.h>
int main()
{
int a;
scanf("%X",&a);
printf("%d",a);
return 0;
}
当控制台要求输入时,我输入了G
。它给出的输出为 63
。它只是未定义的行为还是此输出背后有一些逻辑。对于大多数此类输入,输出结果为 63
。目前致力于 GCC。
scanf("%X",&a);
%X
将只寻找十六进制输入。如果您输入 G
指令将失败,并且不会对 a
进行赋值。本例scanf()
returns0
,指定成功消费的物品数
您应该通过检查 scanf()
:
的 return 值来检查是否所有项目都已成功消耗
if(scanf("%X",&a) != 1) {
fprintf(stderr, "Error occurred at scanning hexadecimal input!");
}
"When console asks for input, I entered G
. It gave the output as 63
. Is it just undefined behaviour or is there some logic behind this output?"
由于 a
未初始化:
int a;
并且在 scanf()
调用中没有成功消费,它会为 a
分配一个合理的值,a
仍然包含垃圾值,因为它是默认存储时间 auto
matic。
打印这个垃圾值确实调用了未定义的行为。
我有一个非常基本的疑问。我试图将任何无效的十六进制数存储在一个 int 变量中。我所说的无效数字是指使用不在 A-F
范围内的字母表的数字。例如看这个程序:
#include<stdio.h>
int main()
{
int a;
scanf("%X",&a);
printf("%d",a);
return 0;
}
当控制台要求输入时,我输入了G
。它给出的输出为 63
。它只是未定义的行为还是此输出背后有一些逻辑。对于大多数此类输入,输出结果为 63
。目前致力于 GCC。
scanf("%X",&a);
%X
将只寻找十六进制输入。如果您输入 G
指令将失败,并且不会对 a
进行赋值。本例scanf()
returns0
,指定成功消费的物品数
您应该通过检查 scanf()
:
if(scanf("%X",&a) != 1) {
fprintf(stderr, "Error occurred at scanning hexadecimal input!");
}
"When console asks for input, I entered
G
. It gave the output as63
. Is it just undefined behaviour or is there some logic behind this output?"
由于 a
未初始化:
int a;
并且在 scanf()
调用中没有成功消费,它会为 a
分配一个合理的值,a
仍然包含垃圾值,因为它是默认存储时间 auto
matic。
打印这个垃圾值确实调用了未定义的行为。