之间的比较,我很困惑,为什么我得到的指针和整数我得到的警告:指针和整数
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!请说明迄今为止的研究/调试工作。请先阅读[问]页面。 –