[爆卦]Fclose man是什麼?優點缺點精華區懶人包

為什麼這篇Fclose man鄉民發文收入到精華區:因為在Fclose man這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者deo2000 (800IM)看板C_and_CPP標題[問題] 如果 feof()==1 還需...


開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux, 但是這個問題應該不分平台吧?

我這邊在 0!=feof() 的時候 fclose 都會發生Segment fault

類似狀況到stackoverflow上去找解答,都是說:
1.因為重複fclose
2.fopen根本就沒有成功

但是我檢查過沒有上述兩點,所以懷疑是不是已經到檔案結尾時,就不用fclose?

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.205.43
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1475552253.A.F59.html

CoNsTaR: 你要不要 fseek 回去再 close 一次試試看 10/04 11:39
fclose 之前加上 fseek(fptrMD5List, 0, SEEK_SET); 還是沒用

Schottky: 應該是有別的地方寫錯,比如說 FILE stream 內容不正確 10/04 11:44
longlongint: feof(裡面有東西嗎) 10/04 12:07
kevingwn: 不fclose()要怎麼釋放fopen()所配置的FILE*資源? 10/04 12:49
Qbsuran: fclose後給NULL 用NULL判斷要不要fclose 10/04 13:55
descent: 貼完整程式碼看看 10/04 14:12
jacky1989: 開檔確定有成功嗎? 10/04 15:00
wtchen: 程式碼貼上來看看,不是每個人都有水晶球的。 10/04 17:40

//打開檔案路徑與MD5清單
FILE* fptrMD5List = fopen(strMD5List,"r");
if(NULL == fptrMD5List)
{
printf("%s open failed !\n",(char*)fptrMD5List);
exit(1);
}

//逐檔驗證
while(NULL != fgets(strStream, 256, fptrMD5List))
{
//strsep會截走定位點之前的字串
strFilePath = strsep(&strStream,"\t");//截出檔案路徑
strFileMD5 = strsep(&strStream,"\n");//截出該檔案MD5
printf("Target File: %s\n",strFilePath);

//這邊都有印出資訊
//回圈內都沒動到 fptrMD5List
}

printf("fptrMD5List=%p\n",fptrMD5List);
if(NULL != fptrMD5List)
{
fclose(fptrMD5List); //Segmentation fault (core dumped)
}
※ 編輯: deo2000 (125.227.205.43), 10/04/2016 18:46:30
※ 編輯: deo2000 (125.227.205.43), 10/04/2016 18:52:49
Schottky: 請貼完整的程式碼,錯誤出在你沒貼出來的地方 10/04 18:53
Schottky: 或是檢查一下 fopen 成功時的 fptrMD5List 和 fclose 時 10/04 18:54
※ 編輯: deo2000 (125.227.205.43), 10/04/2016 18:55:20
Schottky: 其指標值是否一樣,或是已經發生原本不該發生的變動 10/04 18:54
Schottky: 然後 strsep 處理那邊我怎麼看都覺得很危險 10/04 18:56
Schottky: 你應該檢查 strFilePath 和 strFileMD5 的值是否為 NULL 10/04 18:57
blackwindy: &strStream? 10/04 19:03

感謝, 做完 strsep 以後重新配置 strStream 就好了

printf前面加上這行
strStream = (char*)malloc(256);
※ 編輯: deo2000 (125.227.205.43), 10/04/2016 19:05:28
Schottky: 嗯,&strStream 那邊也是錯的 10/04 19:04
shadow0326: 八成哪邊有非法存取 把stack弄爛了 10/04 19:07
shadow0326: 這種bug不一定出在seg fault的那個變數,要看整個區塊 10/04 19:08
Schottky: 建議你把 strsep 的 man page 重看一次,strsep 的 10/04 19:17
Schottky: 第一個參數型態比較特別,但宣告你沒寫出來 10/04 19:18
Schottky: 照你這個動態配置法基本上到時候 free 時也是會出槌 10/04 19:19
Schottky: 因為 strStream 的值會被 strsep 改動 10/04 19:20

你可能也想看看

搜尋相關網站