1:對(duì)于未存在的文件進(jìn)行只讀操作,會(huì)錯(cuò)誤,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;
}
為何運(yùn)行后會(huì)出現(xiàn)segmentation fault, 而若將第二個(gè)printf去掉,替為fclose會(huì)運(yùn)行成功。
2:如何將將程序改為從鍵盤輸入文件名,然后打開(kāi)。
1 回答

onemoo
TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
1.?這個(gè)代碼看起來(lái)很正常,第二個(gè)printf也不應(yīng)引起segmentation fault。
即便文件a不存在,fopen會(huì)失敗,那么fp就是NULL,所以直接跳到第一個(gè)printf處,最后fclose一個(gè)NULL指針也不會(huì)引起錯(cuò)誤。
2. 加入從鍵盤輸入文件名的代碼:
char?filename[256]; scanf("%s",?filename);??//?注意輸入文件名不能超過(guò)255個(gè)字符,否則溢出
后面將fopen中的 a 換成 filename
點(diǎn)擊展開(kāi)后面3條
- 1 回答
- 0 關(guān)注
- 1277 瀏覽
添加回答
舉報(bào)
0/150
提交
取消