C fopen写入失败,错误号为2 [英] C fopen fails for write with errno is 2
本文介绍了C fopen写入失败,错误号为2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我不明白为什么这似乎失败,错误号为2:
char debugText [256];
sprintf (debugText, "C:\List.txt");
dfile = fopen( debugText, "w");
fprintf ( dfile, " err %d
", errno);
我之所以说似乎是因为当dfile为空时,将创建文件并使用我的输出填充该文件。
那么这是怎么回事?
推荐答案
这告诉您的是errno
在您的fopen
调用之后具有值2。您不知道调用失败了,因为您没有检查是否dfile == NULL
。如果输出实际上已写入文件,则可能是fopen
调用成功,而errno
值是前一个调用遗留下来的,很可能是您没有显式执行的调用。
失败的调用可以将errno
设置为某个非零值,但成功的调用不会将errno
设置为0。若要检查错误,您需要
- 调用前设置
errno
为0; - 调用并查看返回的值是成功还是失败;
- 在调用后检查
errno
的值--但只有在您知道失败的情况下才检查(否则errno
的值没有意义)。
如果defile == NULL
,则fprintf
调用具有未定义的行为;它可能会失败。
另一方面,您说dfile
是NULL
。你怎么知道的?您的代码不会检查它。(如果fopen
调用确实失败,C:List.txt
的内容是否可以保留在程序的上一次运行中?)
您从此程序获得的输出是什么?
#include <stdio.h>
#include <errno.h>
int main(void) {
char debugText [256];
FILE *dfile;
sprintf (debugText, "C:\List.txt");
dfile = fopen( debugText, "w");
if (dfile == NULL) {
printf("fopen failed, errno = %d
", errno);
}
else {
printf("fopen succeeded
");
}
return 0;
}
这篇关于C fopen写入失败,错误号为2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文