%d的格式不能用來輸出sizeof的返回值嗎?
01-05
如圖
編譯警告
怎麼會這樣?要怎樣寫才不會有警告?
Hmm。問題是出在sizeof()運算符的值的類型是size_t而不是int,所以用於int的%d不適合。
如果您用的是C99,您需要:#include &
或者
#include &
%zu
作為size_t的格式。
不能。
一個很顯然的事實是,sizeof結果類型是size_t,它是無符號的,而%d用來輸出int,是有符號的。C99就用%zu輸出,至於C89么。。還是轉換成別的什麼類型再輸出吧。例如
printf("%u", (unsigned)sizeof(int));void main一斤差評。
……這時候……該安利clang?
背景不要在意
------------------------其實你要是明白報錯在說什麼你就不會有這個問題了。。。。。。看英文
sizeof返回的是unsigned long類型,所以你應該寫%luC 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++)?