luminous
luminous

Reputation: 13

fopen() failed to open file when debugging?

When I wanted to use fopen() to read a file in Debugging, fopen() always return NULL and I can't locate the error after trying:

  1. I just run the code, and fopen() works well, getting what I want. (but failed in debugging)
  2. I am sured that the file (hello.txt) exists
  3. I write a simple code like:
#include<stdio.h>

int main()
{
    FILE *fp;
    char str[50]; 
    fp = fopen("F:\\notes\\assign\\bonus\\hello.txt","r"); //this line
    fgets(str, 50, fp);
    printf("%s", str);
    return 0;
}

this code doesn't work too. I make a breakpoint at "this line" and watch how the FILE *fp changes.

before: fp: 0x00007ff663b31110 {hello.exe!void(* pre_cpp_initializer)()} {_Placeholder=0x00007ff663ac74a4 {hello.exe!pre_cpp_initialization(void)} }

after: fp: 0x000001b7d6c3eb50 {_Placeholder=0x0000000000000000 } you can see fopen() returns NULL;

  1. I also tried freopen() and fopen_s(), but failed too.

For more information:

I would appreciate if anyone can help me. This disturbs me for a long time.

Upvotes: -1

Views: 987

Answers (2)

liyongbo09
liyongbo09

Reputation: 1

you need to add the workspace path to the launch.json configuration. for example the fallowing configuration ${workspaceFolder}/priv-256.pem".

Upvotes: -1

DevSolar
DevSolar

Reputation: 70381

fp = fopen("F:\\notes\\assign\\bonus\\hello.txt","r"); //this line

A failure by fopen() (and many other standard library functions) will set errno to an error code indicating the error cause. You can turn that into a proper error message by adding code like this:

if ( fp == NULL )
{
    perror( "Failed to open hello.txt" );
    exit( 1 );
}

perror() will append a description of the error cause to the string you have given as argument, and print that to stderr. If you want to log the error message elsewhere, strerror() will write the error message to a string buffer.

Upvotes: 3

Related Questions