猿问

对文件进行只读操作时的两个问题,请指导一下

1:对于未存在的文件进行只读操作,会错误,code如下
#include <stdio.h>

int main(void)
{
FILE* fp = NULL;

if((fp = fopen("a", "r")) == NULL)
   printf("error");
   else
       printf("success");
      
fclose(fp);
  
return 0;
}
为何运行后会出现segmentation fault, 而若将第二个printf去掉,替为fclose会运行成功。

2:如何将将程序改为从键盘输入文件名,然后打开。

妄想之国
浏览 1251回答 1
1回答

onemoo

1. 这个代码看起来很正常,第二个printf也不应引起segmentation fault。即便文件a不存在,fopen会失败,那么fp就是NULL,所以直接跳到第一个printf处,最后fclose一个NULL指针也不会引起错误。2. 加入从键盘输入文件名的代码:char filename[256]; scanf("%s", filename);  // 注意输入文件名不能超过255个字符,否则溢出后面将fopen中的 a 换成 filename
随时随地看视频慕课网APP
我要回答