我有以下程序
#include <stdio.h>
int main(void)
{
unsigned short int length = 10;
printf("Enter length : ");
scanf("%u", &length);
printf("value is %u \n", length);
return 0;
}
当使用gcc filename.c
进行编译时,它会发出以下警告(在scanf()
行中)。
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
然后,我引用了C99 specification - 7.19.6 Formatted input/output functions
,在将长度修饰符(如short
、long
等)与unsigned
一起用于int
数据类型时,我无法理解正确的格式说明符。
%u
是正确的说明符unsigned short int
吗?如果是这样,为什么我会收到上面提到的警告?!
编辑:大多数时候,我在尝试%uh
,但它仍然给出警告。
发布于 2012-01-02 23:37:13
对于scanf
,您需要使用%hu
,因为您将传递一个指向unsigned short
的指针。对于printf
,由于默认提升,不可能传递unsigned short
(它将被提升为int
或unsigned int
,这取决于int
是否至少具有与unsigned short
相同的值位),因此%d
或%u
可以。不过,如果你愿意,你可以自由地使用%hu
。
发布于 2018-03-01 15:50:44
下面是printf
说明符的good table。因此,对于unsigned short int
,它应该是%hu
。
https://stackoverflow.com/questions/8699812
复制相似问题