C_and_CPP 板


LINE

※ 引述《wansincere (阿洵)》之銘言: : 各位先進午安。 : 我是新手個人自學所以有些觀念可能錯很大 : 以下如果有太離譜的地方還請各位先進不吝指教,謝謝。 : 說明有點長,我的問題在最後。 : 我試著寫一支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"); 改成這樣: int itdir=argc-1; char* tmp; FILE* input; FILE* output; mkdir(argv[itdir]); for(a=1;a<=argc-2;a++) { tmp=malloc(strlen(argv[itdir])+strlen(argv[a])+1); //配置記憶體 strcpy(tmp,argv[itdir]); //複製資料夾名稱 strcat(tmp,"/"); //接上 "/" strcat(tmp,argv[a]); //把檔名接上去 input=fopen(argv[a],"r"); //開啟輸入檔 output=fopen(tmp,"w"); //開啟輸出檔 . . . //資料複製 fclose(input); fclose(output); free(tmp); } ... 大致上長這樣,有錯誤請指正 XDD : 這麼做有一個大問題 : 就是傳出的檔名會變這樣: 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.如果都不行的話,還請各位先進給我一點提示,謝謝(鞠躬) -- Coding 日誌 & Linux 使用心得 Rinoworks Blog http://rinoworks.blogspot.com/ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.32 ※ 編輯: Bencrie 來自: 140.121.197.32 (03/10 11:34)
1F:推 wansincere:原來如此,Bencrie前輩給了我很大的啟示 03/10 11:43
2F:→ wansincere:實在是太感謝了,朝聞道午吃飯可矣^^" 03/10 11:45
3F:→ wansincere:聽君一席話勝讀十本書,您的回應就好像黑暗中的一盞明 03/10 11:47
4F:→ wansincere:我不知道該如何表達我的感謝,謝謝 03/10 11:48
5F:推 wansincere:我測試您的作法確實成功了 03/10 11:52
6F:→ weiyucsie:用sprintf看起來比較直覺XD 03/10 15:55
7F:→ weiyucsie:sprintf(tmp, "%s/%s", argv[itdir], argv[a]); 03/10 15:56
8F:→ Bencrie:忘記還有sprintf可以用 XDD 03/10 17:06
9F:推 wansincere:sprintf確實很好用(筆記) 03/11 16:17







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP