Re: [問題] fopen的問題

看板C_and_CPP作者 (フィーリア)時間13年前 (2011/06/08 09:32), 編輯推噓0(0015)
留言15則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《CS1DADA (CS1DADA)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : linux : 問題(Question): : 程式要能夠以執行參數的方式指定要分析的檔案 : 餵入的資料(Input): : test.out ./test/AAA.txt : 預期的正確結果(Expected Output): : 正確的開啟AAA.txt : 程式碼(Code):(請善用置底文網頁, 記得排版) : #include <stdio.h> : char *GS; : int main(char *argv[]){ int main(int argc,char *argv[]){ : GS=argv[1]; : 想問說如果我已經把./test/AAA.txt存在GS中 : 如何利用GS使用fopen來開AAA.txt : fopen("檔名","mode");檔名應該不能直接改成GS吧= = : 還是有別的方法可以用? slPtr = fopen(GS, "r"); 就好了 沒錯,就是這麼簡單 當然要注意的是 這時GS跟argv[1]指到的記憶體位址是一樣的 你得確保程式不會寫入任何的字元到argv[1] : FILE *slPtr; : if ((slPtr=fopen("AAA.txt","a+"))==NULL){ : printf("file could not opened\n"); : } : else{ : fprintf(slPtr,"successfully write\n"); : } : } 除非你要對同個檔案又讀又寫 否則沒必要用'a+' mode -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.54 ※ 編輯: fielia 來自: 140.112.30.54 (06/08 09:33)

06/08 09:44, , 1F
要求安全,和未來不出錯的話,直接用fopen(argv[1],r)
06/08 09:44, 1F

06/08 11:03, , 2F
幫樓上加: char const *r = "r";
06/08 11:03, 2F

06/08 11:44, , 3F
QQ樓主,GS = argv[1]是前複製阿,直接用argv[1]開檔不好
06/08 11:44, 3F

06/08 11:44, , 4F
嘛?
06/08 11:44, 4F

06/08 11:55, , 5F
喔,fopen(argv[1],"r");<--
06/08 11:55, 5F

06/08 14:43, , 6F
因為GS=argv[1]根本沒什麼用....
06/08 14:43, 6F

06/08 14:45, , 7F
要嘛就用char const* GS; 要不然就strcpy(GS,argv[1]);
06/08 14:45, 7F

06/08 14:47, , 8F
直接fopen(argv[1],"r")也可以,這樣至少不會破壞argv[1]
06/08 14:47, 8F

06/08 14:50, , 9F
不過如果有蓋掉GS的機會,最好還是
06/08 14:50, 9F

06/08 14:50, , 10F
GS=malloc(sizeof(char)*(strlen(argv[1])+1));
06/08 14:50, 10F

06/08 14:50, , 11F
再strcpy(GS,argv[1]);
06/08 14:50, 11F

06/08 14:58, , 12F
再龜毛點,GS要是陣列,char GS[FILENAME_MAX];
06/08 14:58, 12F

06/08 15:00, , 13F
畢竟動態陣列要記得去free,而但是常常有鬼打牆.
06/08 15:00, 13F

06/08 15:40, , 14F
如果原po會用C++ STL的話,也可以直接用string物件
06/08 15:40, 14F

06/08 15:41, , 15F
這樣檔名沒長度限制,而且又不用自己注意有沒有free()
06/08 15:41, 15F
文章代碼(AID): #1Dxj4J50 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1Dxj4J50 (C_and_CPP)