我做了以下计划
#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,并且该问题的两个答案都存在冲突,没有人给出正确答案,所选答案在该主题上有所不同。
是否依赖于实施?
许多人似乎在这个问题上有所不同,如果你能参考标准支持你的论点,我们将非常感激。
如果有人发现此问题有任何问题,请在评论中告诉我。
答案 0 :(得分:5)
答案 1 :(得分:2)
这是未定义的行为。 C11草案说:
[...]转换的结果放在了指向的对象中 格式参数后面的第一个参数尚未收到 转换结果。如果此对象没有合适的类型,或者如果 转换的结果无法在对象中表示出来 行为未定义。