【问题标题】:Program.exe has stopped working when trying to open file [closed]尝试打开文件时 Program.exe 已停止工作 [关闭]
【发布时间】:2018-06-23 23:40:42
【问题描述】:
void formFile(FILE** f, char** name)
{
    printf("Enter name: ");
    scanf("%s", name);

    if (1 == doesFileExist(*name, f))
    {
        printf("Already exists.");
        return;
    }
}

这里是doesFileExist(char*, FILE**)

int doesFileExist(char *name, FILE ** f)
{
    if(NULL == (*f = fopen(name, "wb")))
    {
        return 0;
    }
    return 1;

}

formFile() 中,当我注释掉if 时,代码运行没有任何错误。非常感谢任何反馈!

【问题讨论】:

  • 没人知道。请发布minimal reproducible example。此外,您的名为 doesFileExist 的函数会在文件不存在时创建一个文件,这是您想要的吗?
  • 编译时启用所有警告和调试信息的时间(例如,使用gcc -Wall -Wextra -gGCC)并学习如何使用调试器

标签: c file input


【解决方案1】:

doesFileExist() 中,如果fopen() 成功则返回 1,如果失败则返回 0。但是在formFile() 中,如果doesFileExist() 返回1,换句话说,如果一切正常,则会打印一条错误消息。

另一个问题是。你用char **name 调用scanf( "%s", name );%s 需要char * 作为参数(指向一个足够的数组)所以你应该做类似

int size = /* large enough */;
*name = malloc( size );
scanf( "%s", *name );  

或更好地使用fgets( *name, size, stdin ); 而不是scanf(),因为它会自动读取最多size-1 个字符。

【讨论】:

    【解决方案2】:

    它应该是 W+ 或 W

    正确:

     *f = fopen(name, "r"); 
          if(f){
            return 1;//fike exist
           }
       return 0;
    

    【讨论】:

    • @grizloni97 试试上面的代码。 P.S in C 从来没有用二进制练习过为什么会出错
    • 错误,“b”是 fopen 的有效可选模式标志。仔细阅读文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多