間の比較は、私はポインタと整数私はそれを修正する方法私は警告を取得:ポインタと整数
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:Hum。毎日何か新しいことを学ぶ。私はそれがC++のルールだと思っていて、Cのルールはより厳しいものでした。あなたのコメントに答えて、私は答えを緩めました。 – Bathsheba
fread
ストリームから正常に読み取られた項目の数を返します。あなたが渡された実際の数にそれを比較する必要があります:あなたがしようとすると複数の項目を読めば、あなたは戻り値を格納し、0
にそれを比較する必要があり
while (fread(&searchrecord, sizeof(record), 1, fl) == 1)
。
ポインタを整数と比較しないでください – user3528438
'fread()'が返す型は何ですか? –
ようこそスタックオーバーフロー!これまでのところあなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –