[問題] 想請問各位先進一個開檔的問題

看板C_and_CPP (C/C++)作者 (阿洵)時間16年前 (2009/03/10 10:58), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/2 (看更多)
各位先進午安。 我是新手個人自學所以有些觀念可能錯很大 以下如果有太離譜的地方還請各位先進不吝指教,謝謝。 說明有點長,我的問題在最後。 我試著寫一支UNIX下的開檔程式,用C語言寫 main傳入變數的地方是這樣的: (int argc, char *argv[]) 格式是(程式名 檔案來源 輸出目錄) 作用是把來源檔案複製一份到輸出目錄 但是實際執行的時候我不可能一個參數一個參數下 類似這樣: $:> pname a.txt b.txt c.txt new 應該這樣: $:> pname *.txt new 因為最後一個參數是輸出的目錄 所以我就把最後一個參數提出來: int itdir = argc - 1; mkdir(argv[itdir]); 然後再用for迴圈去抓argc的值: for(a=1;a<=argc-2;a++){ strcat(argv[itdir],argv[a]); FILE *file2 = fopen(argv[itdir], "w"); 這麼做有一個大問題 就是傳出的檔名會變這樣: a.txt a.txtb.txt 所以我就想從argv[itdir]下手 清空重抓不太實際,畢竟內容已經被改變了 所以我就想先把他指定給別的變數保留 迴圈中再讀出來,但是讀出來之後記憶體位置沒變內容卻改變了 如果我的參數是./new/,回來變成_/n\ew/ 可能不只如此,因為檔案開得亂七八糟 試了多次不得要領我決定改變做法: size_t length; length = strlen(argv[itdir]); 先算出目錄參數的長度 strncpy(argv[itdir],argv[itdir],length); 再從迴圈中把他拷貝回原始長度 但是我顯然太天真了,strncpy沒發揮任何作用 我想說可能是參數一參數二不能相同吧,但是從設一個tmp出來也一樣 至此我還在繼續研究 但有幾個問題想請問各位先進 1.有沒有辦法直接讀取argv的最後一個參數?不確定argv數量的時候有沒有 比較正規的作法? 2.fopen可以帶入兩個變數嗎?(fopen(argv[itdir]/argv[a], "w");)   類似這樣的。 3.如果都不行的話,還請各位先進給我一點提示,謝謝(鞠躬) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.31.36.137

03/10 11:18, , 1F
1.你的想法是ok的,只是你做法有問題。2.NO
03/10 11:18, 1F

03/10 11:19, , 2F
strcat 會把後面的字串接到前面的字串,但是請注意他是直
03/10 11:19, 2F

03/10 11:20, , 3F
接蓋過去。如果你沒有另外配一個空間來存輸出字串的話,會
03/10 11:20, 3F

03/10 11:21, , 4F
造成不可預期的後果。
03/10 11:21, 4F

03/10 11:54, , 5F
感謝Bencrie前輩的指教,受益菲淺。
03/10 11:54, 5F
文章代碼(AID): #19jTTZ0c (C_and_CPP)
文章代碼(AID): #19jTTZ0c (C_and_CPP)