警告使用sprintf格式字符串

时间:2013-12-31 18:41:09

标签: c

    uint16_t foo;
    char     str[ 32 ];
    sprintf( str, "%6u", foo )

之前的代码段会发出警告:#181参数与相应的格式字符串不兼容。

你怎么能摆脱那个警告?

彼得

3 个答案:

答案 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 );