试图在int变量中存储无效的十六进制数

问题描述 投票:0回答:1

我有一个非常基本的疑问。我试图将任何无效的十六进制数字存储在int变量中。无效数字是指使用不在A-F范围内的字母的数字。例如,请参见此程序:

#include<stdio.h>
int main()
{
    int a;
    scanf("%X",&a);
    printf("%d",a);
    return 0;
}

当控制台要求输入时,我输入了G。输出为63。这只是未定义的行为,还是该输出背后有一些逻辑。对于大多数此类输入,输出为63。目前正在开发GCC。

c gcc int hex undefined
1个回答
0
投票
 scanf("%X",&a);

%X仅在默认情况下会寻求十六进制输入。您可以通过检查scanf的返回值来检查物品是否被成功消耗。

if(scanf("%X",&a) != 1) {
    fprintf(stderr, "Error occurred at scanning");
}

当控制台要求输入时,我输入了G。输出为63。是只是未定义的行为,还是该输出背后有一些逻辑。

由于a未初始化,并且在scanf()调用中没有成功分配了合理的十六进制值的消耗,因此它仍然包含垃圾值。打印该值会调用确实未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.