%d的格式不能用來輸出sizeof的返回值嗎?

如圖

編譯警告

怎麼會這樣?要怎樣寫才不會有警告?


Hmm。問題是出在sizeof()運算符的值的類型是size_t而不是int,所以用於int的%d不適合。

如果您用的是C99,您需要:

#include &

或者

#include &

然後在printf里用

%zu

作為size_t的格式。


不能。

一個很顯然的事實是,sizeof結果類型是size_t,它是無符號的,而%d用來輸出int,是有符號的。

C99就用%zu輸出,至於C89么。。還是轉換成別的什麼類型再輸出吧。例如

printf("%u", (unsigned)sizeof(int));

void main一斤差評。


……這時候……該安利clang?

背景不要在意

------------------------

其實你要是明白報錯在說什麼你就不會有這個問題了。。。。。。


看英文

sizeof返回的是unsigned long類型,所以你應該寫%lu


C Primer Plus :「如果您的編譯器不支持用%zd 說明符列印sizeof的返回值,請使用%u或者%lu」 書中原話。


sizeof的返回值為size_t類型,平台相關的。在64位下為long unsigned int, 32位下為unsigned int,而所以應該用%lu 或 %u輸出。當然,一般情況下,如果在64位系統下,用%ld輸出也是不會出問題的,,我就習慣這麼干。。。


推薦閱讀:

為什麼學習編程第一課要學習輸出"hello, world"?這是誰規定的?
定義了char**p,為什麼能用p[i][j]的形式?p又不是二維數組?
int a=9;printf("%d,%d",a,a++)?

TAG:程序員 | C編程語言 | C語言入門 |