[爆卦]fopen路徑是什麼?優點缺點精華區懶人包

為什麼這篇fopen路徑鄉民發文收入到精華區:因為在fopen路徑這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者cert889 (展翅高飛)看板C_and_CPP標題[問題] 請教fopen開啟子目錄的問題....



遇到的問題: (題意請描述清楚)

已爬文,沒看到類似問題,還請大家幫忙確認問題到底在哪...囧>

我想使用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
VictorTom:只有無法開啟, 都沒有報error之類的??還以為會run-time 04/11 21:39
VictorTom:error說; http://0rz.tw/z0yXW 請看仔細strcat()的 04/11 21:39
VictorTom:dest(同return ptr)的用法, 或者你直接單獨print看看 04/11 21:40
VictorTom:你的strcat到底有沒有成功就知道了....XD 04/11 21:40

不好意思,沒說清楚...^^"
strcpy和strcat都是成功的,有printf過
測試時就只差在strcat是不是放在fopen前面
如果放在fopen後面或作為fopen參數,
則會有segmentation fault的run time error
但debug時發現是跑到更後面的fclose時才會產生該error...
VictorTom:果然有run-time error XD 總之去把strcat的用法看仔細 04/11 22:00
VictorTom:吧; 相關的問題, char *p="test"; char a[]="test"; 04/11 22:01
VictorTom:你如果能區別上面的差別, 就應該知道你strcat哪用錯了:) 04/11 22:02

我的意思是說...
上述程式碼如果將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

VictorTom:pu~~誤會那個seg fault了Orz 不過strcat的問題沒變:) 04/11 22:20
VictorTom:把Parameters的destination的描述看仔細(尤其後一句), 04/11 22:27
VictorTom:then, 你能回答出來你strcat的dest有沒有/有多大的空間 04/11 22:28
VictorTom:來存放接上後的字串嗎:) 04/11 22:28

感謝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)
VictorTom:fclose() seg fault可能的確是因為關了一個不正確的 04/11 22:50
VictorTom:fstream, 試試看fclose(NULL);或fclose((FILE*)1234); 04/11 22:51
VictorTom:會不會導致同樣的seg fault....XD 04/11 22:51

你可能也想看看

搜尋相關網站