当我想使用fopen()在调试中读取文件时,fopen()总是返回NULL,我无法在尝试后找到错误:
- 我只是运行代码,和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()返回NULL;
- 我也尝试了freopen()和fopen_s(),但也失败了。
更多信息:
- 我使用vscode。我的编译器是"clang">我的调试器是Windows VS所以我必须在开发者命令行提示符中启动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()
将把错误原因的描述附加到你作为参数给出的字符串上,并将其打印到stderr
。如果你想在其他地方记录错误消息,strerror()
将把错误消息写入字符串缓冲区。
您需要将工作区路径添加到启动中。json配置。例如下面的配置${workspaceFolder}/privi -256.pem".