调试时 fopen() 无法打开文件?

fopen() failed to open file when debugging?

调试时想用fopen()读取文件时,fopen()总是returnNULL,尝试后找不到错误:

  1. 我只是 运行 代码,fopen() 运行良好,得到了我想要的。 (但调试失败)
  2. 我确定文件 (hello.txt) 存在
  3. 我写了一个简单的代码:
#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;
}

此代码也不起作用。我在“这一行”下了一个断点,然后观察 FILE *fp 是如何变化的。

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

之后: fp: 0x000001b7d6c3eb50 {_Placeholder=0x0000000000000000 } 你可以看到 fopen() returns NULL;

  1. 我也尝试了 freopen() 和 fopen_s(),但也失败了。

更多信息:

如果有人能帮助我,我将不胜感激。困扰了我好久

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

fopen()(以及许多其他标准库函数)的失败会将 errno 设置为指示错误原因的错误代码。您可以通过添加如下代码将其转换为正确的错误消息:

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() 会将错误消息写入字符串缓冲区。