什么是unsigned short int的格式说明符?
我有以下程序
#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
并且在使用unsigned
int
types的长度修饰符(如short
, long
等)时无法理解正确的格式说明符。
%u
是正确的说明符unsigned short int
? 如果是的话,为什么我会得到上述警告?
编辑:大部分时间,我正在尝试%uh
,它仍然给予警告。
尝试使用"%h"
修饰符:
scanf("%hu", &length); ^
ISO / IEC 9899:201x – 7.21.6.1-7
指定以下d,i,o,u,x,X或n转换说明符适用于指针types为short或unsigned short的参数 。
对于scanf
,你需要使用%hu
因为你正在传递一个指向unsigned short
的指针。 对于printf
,由于缺省的促销(它会被提升为int
或unsigned int
取决于int
是否至less有与unsigned short
int
一样多的值),所以不可能传递一个unsigned short
int
,所以%d
或%u
是好的。 不过,你可以自由使用%hu
。
从Linux手册页:
h以下整型转换对应于short int或unsigned short int参数, 低n转换对应于一个短int参数的指针。
所以要打印一个无符号的短整数,格式string应该是"%hu"
。