尝试打开文件时读取访问冲突错误
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);
}
我试图通过使用 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);
}