无符号短整数的格式说明符是什么?

我有以下计划

#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,当使用长度修饰符(如 shortlong等)和 unsigned来表示 int数据类型时,我无法理解正确的格式说明符。

%u是正确的说明符 unsigned short int吗? 如果是,为什么我得到上述警告? !

编辑: 大多数时候,我正在尝试 %uh,它仍然在发出警告。

348359 次浏览

尝试使用 "%h"修饰符:

scanf("%hu", &length);
^

ISO/IEC 9899:201x-7.21.6.1-7

指定以下 d、 i、 o、 u、 x、 X 或 n 转换 指定符应用于 < strong > 指向 short 或 无符号 short .

来自 Linux 手册页:

h      A  following  integer conversion corresponds to a short int or unsigned short int argument, or a fol‐
lowing n conversion corresponds to a pointer to a short int argument.

因此,要打印一个无符号短整数,格式字符串应该是 "%hu"

对于 scanf,需要使用 %hu,因为要传递指向 unsigned short的指针。对于 printf来说,由于缺省促销,它不可能通过 unsigned short(它将被提升到 int或者 unsigned int,这取决于 int是否至少有和 unsigned short一样多的值位) ,所以 %d或者 %hu0都可以。但是,如果您愿意,您可以自由地使用 %hu

这里是一个 桌子不错printf说明符。所以它应该是 %huunsigned short int

还有 链接到 Wikipedia“ C 数据类型”