uint16_t foo;
char str[ 32 ];
sprintf( str, "%6u", foo )
之前的代码段会发出警告:#181参数与相应的格式字符串不兼容。
你怎么能摆脱那个警告?
彼得答案 0 :(得分:4)
“%u”适用于unsigned
,而非uint16_t
。你想要这样的东西:
#include <inttypes.h>
sprintf(str, "%6" PRIu16, foo);
答案 1 :(得分:3)
将uint16_t
转换为unsigned int
,或将"%6u"
替换为"%6" PRIu16
。这需要包含标题inttypes.h
。
答案 2 :(得分:1)
%u
格式指令采用类型unsigned int
的参数,在您的平台上可能大于16位。在32位计算机上,uint16_t
通常对应于unsigned short
,使用%hu
指令打印。
但是,首先使用stdint.h
类型的原因是可移植性。 (也是标准的)inttypes.h
头文件定义了宏,其中包含当前平台的每个stdint.h
类型的相应格式指令。在这种情况下,宏被称为PRIu16
,可以这样使用:
sprintf( str, "%6" PRIu16, foo );