为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
妄想之国 2016-09-12 08:18:21
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:如何将将程序改为从键盘输入文件名,然后打开。
查看完整描述

1 回答

?
onemoo

TA贡献883条经验 获得超454个赞

1. 这个代码看起来很正常,第二个printf也不应引起segmentation fault。

即便文件a不存在,fopen会失败,那么fp就是NULL,所以直接跳到第一个printf处,最后fclose一个NULL指针也不会引起错误。

2. 加入从键盘输入文件名的代码:

char filename[256];
scanf("%s", filename);  // 注意输入文件名不能超过255个字符,否则溢出

后面将fopen中的 a 换成 filename



查看完整回答
反对 回复 2016-09-12
  • 妄想之国
    妄想之国
    谢谢指导,可是关于第一个问题,仍出现segmentation fault 的 提示,我是用C4droid来写程序的
  • 妄想之国
    妄想之国
    已测试,在此程序中为空会segmentation fault, 而若去掉fclose(fp),则运行正常,或用大括号包容else 下的printf语句与fclose函数也可,因未有此文件。
  • onemoo
    onemoo
    很有意思,我查了一下,C标准只是说如果fclose出错会返回EOF,并没有提到不能传入NULL文件指针。 我在Windows下用gcc测试没有出现问题。 在stackoverflow上有人提到MSVC文档说传入NULL会引起EOF, 看来这是个行为在各个平台有不同的实现。
点击展开后面3
  • 1 回答
  • 0 关注
  • 1250 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信