2015-05-24 33 views
0

我用C代碼片段看起來像用於打印size_t值的便攜式代碼?

char buf[16]; 
size_t i = 6; 

sprintf(buf, "%d", i); 

工作......和編譯器警告我說的第三個參數的類型爲「爲size_t」當函數期待一個「廉政」。

所以我儘量告訴它,它會得到一個unsigned int

sprintf(buf, "%u", i); 

現在的編譯器警告我說的第三個參數的類型爲「爲size_t」當函數期待一個「無符號整型」 。


從我在這個問題上的其他問題/解答閱讀,我不能假定爲size_t是一個unsigned int,這也解釋了警告。

  • 那麼,我該如何重新編寫行,讓編譯器很快樂 (即編譯器是沉默的)?

編輯:

之前有人建議它,我在尋找,實際上解決了微小的可能性,事情可能出錯的解決方案。因此,通過去

sprintf(buf, "%d", (int)i); 

sprintf(buf, "%u", (unsigned int)i); 

強制類型轉換是不可取的。

+1

謝謝,顯然解決了它! – roo

回答

0

C99和C11要求z修改:

sprintf(buf, "%zu", i); 

如果MS Visual Studio中有太適應,生活可能是困難的(因爲它不符合無論是C99或C11標準)。根據MSDN,您需要使用I而不是z