2012-11-29 158 views
1

我是C编程的新手,但我正在掌握它。我正在处理一个FILE函数,该函数永远不会返回NULL。即使文件不存在并且初始化为“r”,也会发生这种情况。代码已经工作过,但之后它一直保持返回TRUE。我已经用多种方式编写了代码,但都是作为文件返回的。我甚至改变了文件名来创建一个完全不同的文件,但仍然得到相同的结果。任何帮助都会很棒。提前致谢。NULL不初始化

编辑: 谢谢大家。我已经得到它的工作。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE *fp; 

    fp = fopen("c:\\lest.txt", "w"); 
    if(fp == NULL) 
     { 
     printf("File Not Available\n"); 
     exit(0); 
     } 

    fclose(fp); 

    return 0; 
} 
+1

我使用的代码块的手册页。 –

回答

4

您需要检查fp对null,而不是fopen。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE *fp; 

    fp = fopen("c:\\lest.txt", "r"); 
    if(fp == NULL) 
     { 
     printf("File Not Available\n"); 
     exit(0); 
     } 

    fclose(fp); 

    return 0; 
} 
+0

@Technical_Customs:你是否知道你编辑了一个答案而不是你的问题? fopen()工作正常。但是这里似乎有点混乱。 –

+0

对不起。我注意到当我做到了。我很习惯通过手机查看本网站。 –

3

相反测试fopen为空的,改变的条件来测试fpNULL代替:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE fp*; 

    fp = fopen("c:\\lest.txt", "r"); 
    if(fp == NULL) 
    { 
     printf("File Not Available\n"); 
     exit(0); 
    } 

    fclose(fp); 

    return 0; 
} 
4
fp = fopen("c:\\lest.txt", "r"); 
if(fopen == NULL) 

这些线是错了。 fopen()是一个标准功能。所以fopen(不含括号)始终是非空,因为它代表的fopen()函数指针。

你应该做的是检查的fopen()返回值。在这种情况下,这是fp

if(fp==NULL){ 
    perror("fopen"); 
    exit(1); 
} 

还要注意,

  1. 要打印确切的错误,你应该使用perror()功能。
  2. exit(0)将返回0到OS。这表明成功。更好地使用exit(1)
+0

(fp == NULL)在代码 –

+1

@Technical_Customs:不,它不是。 –

+0

对不起,在编辑代码。谢谢。 –

0

为u是说,即使更改文件名&然后调用计划生育=的fopen( “C:\ lest.txt”, “W”);甚至有名字不存在的文件lest.txt,u得到FP!= NULL

这是因为,如果指定的文件不存在,则在则fopen()函数指定的名称创建新文件,然后它的返回文件指针,所以我觉得你已经得到了UR答案。

更多信息,请参见功能fopen()函数http://linux.die.net/man/3/fopen

相关问题