為什麼這篇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
不好意思,沒說清楚...^^"
strcpy和strcat都是成功的,有printf過
測試時就只差在strcat是不是放在fopen前面
如果放在fopen後面或作為fopen參數,
則會有segmentation fault的run time error
但debug時發現是跑到更後面的fclose時才會產生該error...
我的意思是說...
上述程式碼如果將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
感謝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)