调试时 fopen() 无法打开文件?
fopen() failed to open file when debugging?
调试时想用fopen()读取文件时,fopen()总是returnNULL,尝试后找不到错误:
- 我只是 运行 代码,fopen() 运行良好,得到了我想要的。 (但调试失败)
- 我确定文件 (hello.txt) 存在
- 我写了一个简单的代码:
#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;
- 我也尝试了 freopen() 和 fopen_s(),但也失败了。
更多信息:
- 我用vscode。我的编译器是 "clang",我的调试器是 Windows VS 所以我必须在 Developer Cmd 中启动 vscode提示。
如果有人能帮助我,我将不胜感激。困扰了我好久
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()
会将错误消息写入字符串缓冲区。
调试时想用fopen()读取文件时,fopen()总是returnNULL,尝试后找不到错误:
- 我只是 运行 代码,fopen() 运行良好,得到了我想要的。 (但调试失败)
- 我确定文件 (hello.txt) 存在
- 我写了一个简单的代码:
#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;
- 我也尝试了 freopen() 和 fopen_s(),但也失败了。
更多信息:
- 我用vscode。我的编译器是 "clang",我的调试器是 Windows VS 所以我必须在 Developer Cmd 中启动 vscode提示。
如果有人能帮助我,我将不胜感激。困扰了我好久
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()
会将错误消息写入字符串缓冲区。