1. ホーム
  2. c

[解決済み] uint32_t および size_t 用の printf フォーマット指定子

2022-02-02 06:36:18

質問

次のようなものがあります。

size_t   i = 0;
uint32_t k = 0;

printf("i [ %lu ] k [ %u ]\n", i, k);

コンパイル時に以下のような警告が表示されます。

format ‘%lu’ expects type ‘long unsigned int’, but argument has type ‘uint32_t’

これをsplintを使って実行すると、次のようになりました。

Format argument 1 to printf (%u) expects unsigned int gets size_t: k

何かアドバイスがあれば、よろしくお願いします。

どのように解決するのですか?

あなたが期待しているのは size_t と同じになるように unsigned long (おそらく64ビット)であるにもかかわらず、実際には unsigned int (32ビット)です。試しに %zu のどちらにも対応しています。

でも、完全に確信があるわけではありません。