[問題] 想請問各位先進一個開檔的問題
各位先進午安。
我是新手個人自學所以有些觀念可能錯很大
以下如果有太離譜的地方還請各位先進不吝指教,謝謝。
說明有點長,我的問題在最後。
我試著寫一支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
03/10 11:18, 1F
→
03/10 11:19, , 2F
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
03/10 11:54, 5F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章