两个陈述之间有什么不同,哪个是正确的,应该用什么?
fp是使用的文件指针。
if(fp!= '\n')
收到警告
C4047: '!=' : 'FILE *' differs in levels of indirection from 'int'
和
if(fp!= NULL)
没有收到任何警告。
完整的代码段如下
if(fp!= NULL)
{
fgets(mystring,BUFSIZ,fp);
puts(mystring);
}
答案 0 :(得分:2)
两个陈述之间有什么不同,哪个是正确的,应该用什么?
关于差异:
fp != '\n'
尝试将指针与整数进行比较。这没有意义。
fp != NULL
检查fp
是否为空指针。这是明智之举。
关于哪一个是正确的:
这个问题假设其中一个实际上是正确的。 (但fp != '\n'
肯定是不正确的。)
关于应该使用什么:
这取决于你想要做什么。
此代码:
fgets(mystring,BUFSIZ,fp);
puts(mystring);
也是错误的,因为您忽略了fgets
的返回值,它会告诉您fgets
是否成功,因此mystring
是否设置为有效字符串。< / p>
答案 1 :(得分:1)
'\n'
int
中的C
类型,您将其与FILE指针fp
进行比较,该指针必须在代码中声明为FILE* fp
。所以这一行是if(fp!= '\n')
错误的,意思是更少。将FILE*
与int
进行比较。
正确就是这样:
if(fp!= NULL)
检查fp
是否指向无效的有效文件。
fp = fopen("filename","r");
:
:
if(fp!= NULL)
{ // if file open successfully
fgets(mystring,BUFSIZ,fp);
puts(mystring);
}
在fp = fopen("filename","r");
中,如果函数fopen()
无法打开文件,则返回NULL。
因为在代码fgets
中使用的原因是我使用"r"
模式..