当我想在调试中使用fopen()来读取文件时,fopen()总是返回NULL,并且在尝试之后我无法找到错误:
1.我只是运行代码,fopen()运行良好,得到了我想要的。(但调试失败)
1.我确信文件(hello.txt)存在
1.我写了一个简单的代码:
#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;
1.我还尝试了freopen()和fopen_s(),但也失败了。
如需了解更多信息:
- 我使用vscode。我的编译器是**“clang”,我的调试器是Windows VS**,所以我必须在开发人员命令提示符中启动vscode。
如果有人能帮助我,我将不胜感激。这件事困扰了我很长时间。
2条答案
按热度按时间jchrr9hc1#
fopen()
(以及许多其他标准库函数)的失败会将errno
设置为一个错误代码,指示错误原因。您可以通过添加如下代码将其转换为正确的错误消息:perror()
会将错误原因的描述附加到您作为参数给出的字符串中,并将其打印到stderr
。如果您希望将错误消息记录到其他位置,strerror()
会将错误消息写入字符串缓冲区。kxe2p93d2#
您需要添加工作区路径到launch.json配置。例如下面的配置${workspaceFolder}/priv-256.pem”。