2013-05-27 53 views
0

第C否則UNIX FUNC 「CP」 的模擬和我有實現麻煩:麻煩與strcat的[C用於UNIX]

struct stat fsd; 
stat(argv[argc - 1], &fsd); 

if ((fsd.st_mode & S_IFMT) == S_IFDIR) { 

    unsigned int i; 

    for (i = src; i < argc - 1; i++) { 

     char *xpath = strcat(argv[argc - 1], "/"); 
       xpath = strcat(argv[argc - 1], argv[i]); 

     if (cpf(argv[i], xpath) == 0) { 

      printf("%s -> %s\n", argv[i], xpath); 
     } 

    } 
} 

實施例的命令:./cp F1 F2 F3 F4 DIR
其中: f * - 文件和目錄 - 目錄。 所以,文件需要複製到目錄中,但我無法爲目錄創建正確的路徑。

輸出:

f1 -> dir/f1 
f2 -> dir/f1/f2 
f3 -> dir/f1/f2/f3 
f4 -> dir/f1/f2/f3/f4 

但我需要:

f1 -> dir/f1 
f2 -> dir/f2 
f3 -> dir/f3 
f4 -> dir/f4 

真的不知道如何解決它:(

+0

閱讀'strcat()'的手冊頁,真的。你的緩衝區太小了。 – 2013-05-27 14:04:54

+0

'argv [argc - 1]'不適合你寫在最後。創建自己的緩衝區以寫入/追加。 – mah

回答

2

的主要問題,很多的,這兩個

xpath = strcat(argv[argc - 1], ... 

concatenate給argv [argc - 1]附加文本。

我確定您認爲strcat()連接了2個字符串,並提供了組合結果作爲答案而不影響輸入。它不這樣做,而是將第二個參數追加到1st,返回第一個參數。

重新編寫代碼以創建緩衝區工作區。

char xpath[1000]; 
strcpy(xpath, argv[argc - 1]); 
strcat(xpath, "/"); 
strcat(xpath, argv[i]); 

BTW情況下,sizeof()的xpath可以是MAXPATHLEN或一些其它系統常數,但是這是另一個問題。見#include limits.h

+0

Thx很多爲您的幫助!:) – nemelianov