微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法用gdb的相对路径进行fopen?

如何解决有没有办法用gdb的相对路径进行fopen?

我正在尝试使用相对路径执行fopen()。 该代码很简单:

#include <stdio.h>
#include <stdlib.h>


int main (void){

    char filename[FILENAME_MAX]="test.txt";
    FILE *fin;
    if ((fin=fopen(filename,"r"))==NULL)
    {
        printf("File not found.");
        exit(EXIT_FAILURE);
    }
    else
    {
        printf("opened!");
    }
    
    return 0;

}

我尝试了2种方法

  1. 使用gcc编译代码,然后使用./a
  2. 运行它
  3. 使用gdb构建并在vscode上运行,设置完全来自https://medium.com/@GorvGoyl/run-debug-intellisense-c-c-in-vscode-within-5-minutes-3ed956e059d6

我尝试将文件名更改为几件事,结果如下:

char filename[FILENAME_MAX]="test.txt";

gcc:已打开!

gdb:找不到文件

char filename[FILENAME_MAX]=".\\test.txt";

gcc:已打开!

gdb:找不到文件

char filename[FILENAME_MAX]="C:\\fullfolderpath\\test.txt";

gcc:已打开!

gdb:已打开!

有没有一种方法可以在使用gdb时以相对路径打开txt文件?这些文件将与源代码和编译后的程序存储在同一目录中。

解决方法

如果perror(3)失败,请至少使用fopen(3),并且当然阅读这些功能的文档

所以代码:

if ((fin=fopen(filename,"r"))==NULL)
{
    perror(filename);
    printf("File not found.\n");
    exit(EXIT_FAILURE);
}

在使用它们之前先阅读printf(3)exit(3)的文档。

当然,还请阅读GCCGDB的文档。

我建议使用foo.c编译您的gcc -Wall -Wextra -g foo.c -o foo

在Linux上,还可以考虑使用strace(1)(当然要读syscalls(2) ...)来了解程序的行为。

如果您使用其他操作系统或编译器,请阅读编译器和操作系统的文档。对于Windows,请参阅WinAPI

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。