簡體   English   中英

在sprintf中使用格式字符串的警告

[英]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_tunsigned 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM