formatted print c




平台無關size_t c中的格式說明符? (2)

我想在C中打印出size_t類型的變量,但看起來size_t是不同體系結構上不同變量類型的別名。 例如,在一台計算機(64位)上,以下代碼不會拋出任何警告:

size_t size = 1;
printf("the size is %ld", size);

但在我的另一台機器(32位)上面的代碼會產生以下警告消息:

警告:格式'%ld'需要類型'long int *',但參數3的類型為'size_t *'

我懷疑這是由於指針大小的不同,所以在我的64位機器上size_t別名為long int"%ld" ),而在我的32位機器上, size_t別名為另一種類型。

是否有專門針對size_t的格式說明符?


MSDN表示,Visual Studio支持32位和64位平台上可移植代碼的“I”前綴。

size_t size = 10;
printf("size is %Iu", size);

就在這裡。 它是%zu (在ANSI C99中指定)。

size_t size = 1;
printf("the size is %zu", size);

請注意, size_t是無符號的,因此%ld是雙重錯誤:錯誤的長度修飾符和錯誤的格式轉換說明符。 如果您想知道, %zd適用於ssize_t (已簽名)。







format-specifiers