如果我输入的数字超过C中的数据类型范围会发生什么?

时间:2017-02-10 15:05:26

标签: c scanf

我做了以下计划

#include <stdio.h>

int main()
{
    // Testing Number

    unsigned int num;

    printf("Enter The Number : ");
    scanf("%u" , &num);                  // If I Enter 4294967298
    printf("Your Number is : %u" , num); // Output Comes Out To Be 2
}

现在在上面的程序中如果输入4294967298输出结果为2,并且在此处于stackoverflow,answers表示如果输入的数字超过所需范围,则scanf会存储UINT_MAX,并会根据该答案进行打印,并且会对其进行讨论。我尝试了自己,并且在进行模运算后,它在打印范围之后的行为并不像这样。

如果可以指出标准所说的内容,那将非常有用。

我已阅读其他answer,并且该问题的两个答案都存在冲突,没有人给出正确答案,所选答案在该主题上有所不同。

是否依赖于实施?

许多人似乎在这个问题上有所不同,如果你能参考标准支持你的论点,我们将非常感激。

如果有人发现此问题有任何问题,请在评论中告诉我。

2 个答案:

答案 0 :(得分:5)

将调用未定义的行为。

引自N1570 7.21.6.2 fscanf函数,第10段:

  

如果是这个对象   没有合适的类型,或者无法表示转换结果   在对象中,行为是未定义的。

答案 1 :(得分:2)

这是未定义的行为。 C11草案说:

  

[...]转换的结果放在了指向的对象中   格式参数后面的第一个参数尚未收到   转换结果。如果此对象没有合适的类型,或者如果   转换的结果无法在对象中表示出来   行为未定义。