【问题标题】:No such file or directory and segmentation fault - opening a file没有这样的文件或目录和分段错误 - 打开文件
【发布时间】:2015-11-24 12:09:01
【问题描述】:

当我给函数提供文件目录(比如 /home/username/filename.txt )时,我得到了错误:

没有这样的文件或目录 分段错误(核心转储)

获取名称的部分工作正常,但 fopen() 返回 NULL 我的函数代码是:

#define L_SIZE 128
FILE* openFile()
{
    char dir[L_SIZE];

    printf("Enter the file's directory: ");

    if(fgets( dir, L_SIZE, stdin ))
    {
        printf("\nWe got the directory: %s\n",dir);
        FILE* fp;
        if ( (fp = fopen( dir, "r" )) == NULL )
        { 
            perror("An error has occured");
            return NULL;
        }
        else
        {
            return fp;
        }
    }
    else
    {
        printf("Sorry, An error has occurs.\n");
        return NULL;
    }
}

【问题讨论】:

  • 在哪里程序崩溃了?我猜它在调用你的函数的代码中,你不检查它是否返回NULL
  • 顺便说一句,重要的是要知道fgets 将在它写入的缓冲区中包含换行符,这是您无法处理的。
  • @JoachimPileborg,谢谢,我会努力解决的。
  • 它在哪里崩溃?我在你的程序 sn-p 中没有看到任何可能发生崩溃的地方。

标签: c file fopen


【解决方案1】:

问题可能与您使用 fgets() 获取输入的事实有关:返回路径将包含 \n 字符。

尝试删除它(例如,使用strtok(dir, "\n");),它会起作用。

【讨论】:

  • 是的,谢谢,它真的很有帮助。或 `dir[strlen(dir)-1]='\0' 也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 2018-07-06
  • 2019-01-19
  • 1970-01-01
  • 2019-01-26
  • 2021-06-08
  • 1970-01-01
相关资源
最近更新 更多