[英]Warning using format string with sprintf
uint16_t foo;
char str[ 32 ];
sprintf( str, "%6u", foo )
先前的代碼段引發警告: #181參數與相應的格式字符串不兼容 。
您將如何擺脫該警告?
彼得
“%u”是unsigned
,不是uint16_t
。 您想要類似的東西:
#include <inttypes.h>
sprintf(str, "%6" PRIu16, foo);
您可以將uint16_t
為unsigned int
,或者將"%6u"
替換為"%6" PRIu16
。 這要求包含頭inttypes.h
。
%u
format指令采用unsigned int
類型的參數,在您的平台上該參數可能大於16位。 在32位計算機上, uint16_t
通常對應於unsigned short
,它使用%hu
指令打印。
但是,首先使用stdint.h
類型的原因是可移植性。 (也是標准的) inttypes.h
頭文件定義了宏,這些宏包含用於當前平台的每種stdint.h
類型的適當格式指令。 在這種情況下,該宏稱為PRIu16
,可以這樣使用:
sprintf( str, "%6" PRIu16, foo );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.