【发布时间】:2014-01-05 13:04:46
【问题描述】:
这是第一个代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
short int a;
unsigned short int l;
scanf("%d%u",&a,&l);
printf("%d %u",a,l);
return 0;
}
如果我给出输入(可能是任何其他输入)
5
9
输出是
0 9
第二个代码是
#include <stdio.h>
#include <stdlib.h>
int main()
{
short int a;
unsigned short int l;
scanf("%u%d",&l,&a);
printf("%d %u",a,l);
return 0;
}
如果我给出输出(可能是任何其他输入)
9
5
输出是
5 9
为什么scanf("%d%u",&a,&l); 不起作用而scanf("%u%d",&l,&a); 起作用?
【问题讨论】:
-
因为
%u和%d是正常的int,而不是short int。 -
@OliCharlesworth 那么这在第一种情况下是如何工作的?还是他走运了?
-
两者都不起作用,因为由于 Oli 提供的原因,它们都调用了未定义的行为。
-
@ᴍarounᴍaroun 这是未定义的行为,他正在使用分配给变量的内存之外的内存。他很幸运。
-
@ᴍarounᴍaroun:因为这是 UB,我想这只是机会。