2016-11-02 36 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

相关问题