尝试打开文件时读取访问冲突错误

Read access violation error on trying to open a file

我试图通过使用 fopen() 打开文件然后检查函数 returns NULL 来检查文件是否存在。但是当我 运行 代码时,它说发生读取访问冲突错误,但我不明白为什么,因为我检查过并且我试图读取的文件是 txt 并且已经在其中写入了文本。有人可以解释为什么以及如何解决它吗?

int main(int argc, char** argv)
{
    int quit = FALSE;
    if (fopen(*(argv+2), 'r') == NULL)
    {
        printf("Invalid input! File does not exit.");
        quit = TRUE;
    }
}

首先,从fopen manual可以看出函数签名为:

FILE *fopen(const char *pathname, const char *mode);

这意味着它将 return 类型为 FILE 的指针,并需要两个参数,都指向 char。您在代码中传递给 fopen 的第二个参数是 char,而不是 char*,因此我们需要修复它。此外,存储 returned fopen 指针,因为您应该在完成后使用它关闭文件。

因此,您的代码将类似于:

FILE *fp;

if ((fp = fopen(argv[2], "r")) == NULL) {
    printf("File does not exist!\n");
    exit(0);
} else {
    /* file exists... do stuff */
    fclose(fp);
}