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
- 1 回答
- 0 关注
- 1250 浏览
添加回答
举报
0/150
提交
取消