1

我是 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

4 回答 4

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;
}
于 2012-11-29T04:36:16.217 回答
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 返回给操作系统。这表明成功。更好用exit(1)
于 2012-11-29T04:38:22.140 回答
3

不要测试fopennull,而是更改要测试的fp条件NULL

#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;
}
于 2012-11-29T04:37:57.077 回答
0

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

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

有关更多信息,请参阅函数 fopen() http://linux.die.net/man/3/fopen的手册页

于 2012-11-29T05:07:17.303 回答