2016-11-02 69 views
2

之間的比較,我很困惑,爲什麼我得到的指針和整數我得到的警告:指針和整數

while (fread(&searchrecord, sizeof(record), 1, fl) != NULL) 

我如何解決它之間的這種警告[警告]比較呢?

+2

不會比較指針和整數 – user3528438

+3

'fread()'返回什麼類型? –

+0

歡迎來到Stack Overflow!請說明迄今爲止的研究/調試工作。請先閱讀[問]頁面。 –

回答

5

fread返回一個size_t值,它是一個無符號整數類型。您的平臺將NULL定義爲(void*)0,這是一種指針類型。

由於您正在比較這些不相關的類型,因此編譯器會發出警告。

的解決方法是刪除!= NULL在你的病情:

while (fread(&searchrecord,sizeof(record),1,fl)) 

這是更清晰的反正。

+1

「NULL」的定義是實現定義的。 '(void *)0'只是一個廣泛使用的實現。並且C標準6.3.2.3.3(N1570)明確允許NULL(「空指針常量」)爲「整型常量表達式」,所以'NULL'不一定是指針類型。 – user3528438

+1

@ user3528438:哼。每天學些新東西。我認爲這是C++規則,而C規則更加嚴格。迴應你的評論,我放鬆了答案。 – Bathsheba

0

fread返回從流中成功讀取的項目數。你應該比較,爲您傳遞的實際數量:

while (fread(&searchrecord, sizeof(record), 1, fl) == 1) 

如果您嘗試和閱讀不止一個項目,你應該存儲返回值和比較,爲0

相關問題