C语言 fopen()调试时打开文件失败?

jhdbpxl9  于 2023-03-12  发布在  其他
关注(0)|答案(2)|浏览(248)

当我想在调试中使用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。

如果有人能帮助我,我将不胜感激。这件事困扰了我很长时间。

jchrr9hc

jchrr9hc1#

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

kxe2p93d

kxe2p93d2#

您需要添加工作区路径到launch.json配置。例如下面的配置${workspaceFolder}/priv-256.pem”。

相关问题