之間的比較,我很困惑,爲什麼我得到的指針和整數我得到的警告:指針和整數
while (fread(&searchrecord, sizeof(record), 1, fl) != NULL)
我如何解決它之間的這種警告[警告]比較呢?
之間的比較,我很困惑,爲什麼我得到的指針和整數我得到的警告:指針和整數
while (fread(&searchrecord, sizeof(record), 1, fl) != NULL)
我如何解決它之間的這種警告[警告]比較呢?
fread
返回一個size_t
值,它是一個無符號整數類型。您的平臺將NULL
定義爲(void*)0
,這是一種指針類型。
由於您正在比較這些不相關的類型,因此編譯器會發出警告。
的解決方法是刪除!= NULL
在你的病情:
while (fread(&searchrecord,sizeof(record),1,fl))
這是更清晰的反正。
「NULL」的定義是實現定義的。 '(void *)0'只是一個廣泛使用的實現。並且C標準6.3.2.3.3(N1570)明確允許NULL(「空指針常量」)爲「整型常量表達式」,所以'NULL'不一定是指針類型。 – user3528438
@ user3528438:哼。每天學些新東西。我認爲這是C++規則,而C規則更加嚴格。迴應你的評論,我放鬆了答案。 – Bathsheba
fread
返回從流中成功讀取的項目數。你應該比較,爲您傳遞的實際數量:
while (fread(&searchrecord, sizeof(record), 1, fl) == 1)
如果您嘗試和閱讀不止一個項目,你應該存儲返回值和比較,爲0
。
不會比較指針和整數 – user3528438
'fread()'返回什麼類型? –
歡迎來到Stack Overflow!請說明迄今爲止的研究/調試工作。請先閱讀[問]頁面。 –