NULL没有初始化

时间:2012-11-29 04:33:59

标签: c fopen

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

编辑: 感谢大家。我已经开始工作了。

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

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:4)

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

这些行是错误的。 fopen()是标准函数。因此fopen(不带括号)将始终为非NULL ,因为它表示fopen()的函数指针。

您应该检查fopen()的返回值。在这种情况下fp

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

另请注意,

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

答案 2 :(得分:3)

而不是将fopen测试为null,而是将条件更改为fp NULL,而不是:{/ p>

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

答案 3 :(得分:0)

正如你所说,即使更改文件名&amp;然后调用 fp = fopen(“c:\ lest.txt”,“w”); 即使没有名称 lest.txt 的现有文件,你也会得到 FP!= NULL 即可。

会发生这种情况,因为如果指定的文件不存在则会创建fopen()函数中具有指定名称的新文件,然后返回它的文件指针,所以我想你已经得到了答案。

有关详细信息,请参阅函数fopen()http://linux.die.net/man/3/fopen

的手册页