C fopen fails for write with errno is 2
c, errno, fopen
Solution
All this tells you is that `errno` had the value 2 after your `fopen` call. You don't know that the call failed, because you didn't check whether `dfile == NULL`. If the output was actually written to the file, presumably the `fopen` call succeeded and the `errno` value was left over from some previous call, likely one you didn't make explicitly.
It's entirely possible for a successful call to `fopen` to set `errno` to a non-zero value.
Failing calls can set `errno` to some non-zero value, but successful calls don't set `errno` to 0. To check for errors, you need to
- Set `errno` to 0 before the call;
- Make the call and check the value it returned to see whether it succeeded or failed; and
- Check the value of `errno` after the call -- but only if you know it failed (otherwise the value of `errno` is meaningless).
If `dfile == NULL`, then the `fprintf` call has undefined behavior; it will probably fail.
On the other hand, you say that `dfile` is `NULL`. How do you know that? Your code doesn't check it. (If the `fopen` call really did fail, could the contents of `C:\List.txt` be left over from a previous run of your program?)
What output do you get from this program?
#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\n", errno);
}
else {
printf("fopen succeeded\n");
}
return 0;
}
Problem
I do not understand why this is seemingly failing with errno of 2: ``` char debugText [256]; sprintf (debugText, "C:\\List.txt"); dfile = fopen( debugText, "w"); fprintf ( dfile, " err %d \n", errno); ``` I say seemingly because while dfile is NULL the file gets created and is filled with my output. so what is going on ?