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



当我想使用fopen()在调试中读取文件时,fopen()总是返回NULL,我无法在尝试后找到错误:

  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()返回NULL;

  1. 我也尝试了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".

相关内容

  • 没有找到相关文章

最新更新