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;
}