我正在尝试写入 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
可能有多种原因导致
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 可以在失败时尝试打开带有错误代码的文件。