看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《neville123 (nk)》之銘言: : FILE *stream [512] ; : void *runner(void* id); ^^^^^ 先問一下,你確定你是要 return void* ? 我看你函式實作似乎是只有 void runner(void* id) : int main(int argc, char *argv[]){ ^^^^^^ ^^^^^^^ 這裡才是 argc, argv ... 恕刪 ... : } : void *runner(void* id){ : (int*)id; : printf ("%d ", id); : stream[id] = fopen("argv[id]", "r"); ^^^^^^^^^^ 這裡推斷,你對 argc, argv, 引數參數 沒有很熟 : ; : } -------------------------------------------------------- 先簡化你的問題好了, 畢竟你的問題還有牽扯到 function pointer 當引數參數。 如果你的需求只是要取得 argv 的參數列的話, 應該是這麼做 int main(int argc, char **argv) { int ix=0; for(ix=0; ix<argc; ++ix) { printf("第 %d 個參數為 %s\n", ix, argv[ix]); } } 假設您的生成檔為 T.exe 執行時,如果於命令提示字元輸入 T.exe \o \p a.dat b.txt 那麼 argc = 5 argv[0] = T.exe, argv[1] = \o, argv[2] = \p argv[3] = a.dat, argv[4] = b.txt 於此可以觀查到, argv[0] 將是執行檔名 -------------------------------------------------------- 如果你要的動作是像這樣 T.exe 1.txt 2.txt 3.txt 4.txt 然後去開啟 1~4 .txt 進行寫入 那應該是這麼做 #include <stdio.h> FILE *fp[512]; int main(int argc, char **argv) { int iStart=1; // 檔名是從 index 1 開始的 // 一次全開 for(iStart=1; iStart<argc, ++iStart) fp[iStart-1] = fopen(argv[iStart], "w"); // dosomething // 一次全關 for(iStart=1; iStart<argc, ++iStart) fp[iStart-1] = fclose(argv[iStart]; return 0; } 如果你是要傳到 sub_func 去開啟檔案的話, 你的 sub_func 還要多加二個引數去接 main func 裡面的 argc 和 argv -------------------------------------------------------- 提外話, C/C++ 用 fopen/fstream 指令的話一次最多大概可以開 2048 個檔案 預設最多可開 512 個檔案 (depend on compiler) vc 可調用 _getmaxstdio 與 _setmaxstdio 512 這個數字可以設定, 不過似乎只能設小, 不能設大, 就算設小, 最小值也要大於等於 FOPEN_MAX 要設大,最大值不能超過 2048 (depend on compiler) 要再開更多檔案的話就要用 open 方式去開 至於 open 可以最多可以開幾個檔的話.. depend on OS -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.142 ※ 編輯: tropical72 來自: 180.177.76.142 (01/03 23:36)
neville123:謝謝t大 大致上知道可以了解 那想請問 01/03 23:56
neville123:如果我在main 裡頭把所有檔案全開之後 那是要怎麼讓 01/03 23:56
neville123:sub_func來讀取這些檔案呢? 是把檔名當作參數傳遞嗎? 01/03 23:57
uranusjr:不然就用全域變數 01/04 00:02
VictorTom:檔案都fopen完了, 就傳FILE*就好, 不用再傳遞檔名; 不然 01/04 00:28
VictorTom:就像4F u大說的用全域變數. 建議先用簡單的方法試通了, 01/04 00:28
VictorTom:再嘗試去修改優化code:) 01/04 00:29
james732:http://nopaste.csie.org/23d55 其實要傳遞就這麼簡單 01/04 00:30
james732:非不得已,我是不建議用全域變數啦 XD 01/04 00:30
neville123:真的很謝謝大家這麼熱心回答我的問題 01/04 09:15
neville123:受用不盡 ^^ 01/04 09:16