C fopen写入失败,错误号为2 [英] C fopen fails for write with errno is 2

查看:14
本文介绍了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调用具有未定义的行为;它可能会失败。

另一方面,您说dfileNULL。你怎么知道的?您的代码不会检查它。(如果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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆