文件IO中的两个语句之间有什么区别

时间:2013-01-17 10:34:32

标签: c file-io

两个陈述之间有什么不同,哪个是正确的,应该用什么?

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);
    }

2 个答案:

答案 0 :(得分:2)

  

两个陈述之间有什么不同,哪个是正确的,应该用什么?

关于差异:
fp != '\n'尝试将指针与整数进行比较。这没有意义。
fp != NULL检查fp是否为空指针。这是明智之举。

关于哪一个是正确的:
这个问题假设其中一个实际上是正确的。 (但fp != '\n'肯定是不正确的。)

关于应该使用什么:
这取决于你想要做什么。

此代码:

fgets(mystring,BUFSIZ,fp);
puts(mystring);

也是错误的,因为您忽略了fgets的返回值,它会告诉您fgets是否成功,因此mystring是否设置为有效字符串。< / p>

答案 1 :(得分:1)

{p> '\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"模式..