[問題] 請教fopen開啟子目錄的問題...

看板C_and_CPP (C/C++)作者 (展翅高飛)時間16年前 (2010/04/11 21:17), 編輯推噓4(4010)
留言14則, 1人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 已爬文,沒看到類似問題,還請大家幫忙確認問題到底在哪...囧> 我想使用fopen()開啟子目錄下的檔案,但在使用strcat結合路徑和檔名時 strcat()如置於fopen()之前或之內則會無法開啟檔案 範例程式碼如下: char fpath[20]={}, fname[]="text.txt"; strcpy(fpath, strcat(".\\subdir\\",fname)); FILE *fp=fopen("subdir\\text.txt","a+"); ^^^^^^^^^^^^^^^^ 在此就算參數直接傳字串,也無法開啟檔案 若把strcpy放在fopen之後就可以正確開啟檔案 但是目的當然是fopen會開啟不同檔案,所以 strcpy一定得在fopen之前啊....囧> if(!fp) printf("open file failed!\n"); else ... 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Qt creator under Windows (gcc) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.192.62

04/11 21:39, , 1F
只有無法開啟, 都沒有報error之類的??還以為會run-time
04/11 21:39, 1F

04/11 21:39, , 2F
error說; http://0rz.tw/z0yXW 請看仔細strcat()的
04/11 21:39, 2F

04/11 21:40, , 3F
dest(同return ptr)的用法, 或者你直接單獨print看看
04/11 21:40, 3F

04/11 21:40, , 4F
你的strcat到底有沒有成功就知道了....XD
04/11 21:40, 4F
不好意思,沒說清楚...^^" strcpy和strcat都是成功的,有printf過 測試時就只差在strcat是不是放在fopen前面 如果放在fopen後面或作為fopen參數, 則會有segmentation fault的run time error 但debug時發現是跑到更後面的fclose時才會產生該error...

04/11 22:00, , 5F
果然有run-time error XD 總之去把strcat的用法看仔細
04/11 22:00, 5F

04/11 22:01, , 6F
吧; 相關的問題, char *p="test"; char a[]="test";
04/11 22:01, 6F

04/11 22:02, , 7F
你如果能區別上面的差別, 就應該知道你strcat哪用錯了:)
04/11 22:02, 7F
我的意思是說... 上述程式碼如果將fopen和strcpy這兩行對調如下就會過: FILE *fp=fopen("subdir\\text.txt","a+"); strcpy(fpath, strcat(".\\subdir\\",fname)); 該runtime error只要把fclose()取消掉就不會出現 另V大給的連結我也上去看過了,能否提示具體一點...^^"a 但因: 一、目前fopen參數為常數字串並非strcpy或strcat的結果 (雖然該結果經列印也是正確的) 二、debug時,如果if(!fp)時就return,則完全不會有runtime error 顯然前述runtime error會發生是因為fopen失敗所以fclose失敗 所以,strcat用法跟這兩行程式對調就會無法開啟檔案有何關係??...= =a 不好意思,新手上路...麻煩各位先進了...T^T

04/11 22:20, , 8F
pu~~誤會那個seg fault了Orz 不過strcat的問題沒變:)
04/11 22:20, 8F

04/11 22:27, , 9F
把Parameters的destination的描述看仔細(尤其後一句),
04/11 22:27, 9F

04/11 22:28, , 10F
then, 你能回答出來你strcat的dest有沒有/有多大的空間
04/11 22:28, 10F

04/11 22:28, , 11F
來存放接上後的字串嗎:)
04/11 22:28, 11F
感謝v大的指正,已將該程式碼改為: char path[20]={}, fname[]="text.txt"; strcat(path,"subdir\\"); strcat(path,fname); ... 之後不論fopen在前或在後都能正常執行了...<(_ _)> 雖然我還是搞不懂為什麼這個地方出錯是到最後才會seg fault...囧> ※ 編輯: cert889 來自: 118.168.192.62 (04/11 22:40) ※ 編輯: cert889 來自: 118.168.192.62 (04/11 22:41)

04/11 22:50, , 12F
fclose() seg fault可能的確是因為關了一個不正確的
04/11 22:50, 12F

04/11 22:51, , 13F
fstream, 試試看fclose(NULL);或fclose((FILE*)1234);
04/11 22:51, 13F

04/11 22:51, , 14F
會不會導致同樣的seg fault....XD
04/11 22:51, 14F
文章代碼(AID): #1BmSlKBl (C_and_CPP)
文章代碼(AID): #1BmSlKBl (C_and_CPP)