fopen 返回 null 但 errno = 0:成功

问题描述 投票:0回答:1

我正在尝试写入 C 中的文本文件,该文件与 main 位于同一目录中,但是

fopen
不断返回
NULL
。这里的大多数回复都说打印
errno
的值,但是
errno
0
,这是成功的。我不知道如何解决这个问题。

这就是我所拥有的。

#include <errno.h>
#include <stdio.h>
#include <string.h>

void write_To_File(double num) {
    FILE *fptr = fopen("data.txt", "w"); // open filename in write mode
    if (fptr == NULL) { 
        fprintf(stderr, "open errno = %d: %s\n", errno, strerror(errno));
        return;
    } 
    fprintf(fptr, "%lf\n", num);
    fclose(fptr);
    return;
}

int main(void) {
    double num = 3.5;
    write_To_File(num);
}

这是程序的输出:

open errno = 0: Success
c fopen errno
1个回答
0
投票

可能有多种原因导致

fopen
失败并返回
NULL
。在 POSIX 兼容系统上,
errno
设置为帮助调用者确定失败原因并采取相应措施。您使用
errno
strerror
的方法很好。您可能应该在错误消息中添加文件名,以便用户获得完整的信息诊断:'

#include <errno.h>
#include <stdio.h>
#include <string.h>

int write_To_File(double num) {
    FILE *fptr = fopen("data.txt", "w"); // open filename in write mode
    if (fptr == NULL) { 
        fprintf(stderr, "cannot open %s for writing: %s (errno = %d)\n",
                "data.txt", strerror(errno), errno);
        return -1;
    } 
    fprintf(fptr, "%f\n", num);
    fclose(fptr);
    return 0;
}

int main(void) {
    double num = 3.5;
    write_To_File(num);
    return 0;
}

在其他系统上,行为将取决于实施质量

C 标准不强制

fopen
在失败时设置
errno
。这是不幸的,并且没有标准方法来调查失败的原因。可能有一个系统特定的 API 可以检索更多信息,或者有一个系统特定的 API 可以在失败时尝试打开带有错误代码的文件。

© www.soinside.com 2019 - 2024. All rights reserved.