1

这两种陈述之间有什么区别,哪个是正确的,应该使用什么?

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

2 回答 2

2

这两种陈述之间有什么区别,哪个是正确的,应该使用什么?

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

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

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

这段代码:

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

也是错误的,因为您忽略了 的返回值fgets,这将告诉您是否fgets成功,因此是否mystring设置为有效字符串。

于 2013-01-17T10:46:52.690 回答
1

'\n'int输入,并且您正在将其与必须在代码中声明C的 FILE 指针进行比较 。所以这条线是 错误的,意义不大。比较。 _fpFILE* fpif(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"模式..

于 2013-01-17T10:43:49.613 回答