2015-04-23 56 views
0

我正在構建一個程序,將目錄相互複製,但我只能讓它工作硬編碼。輸入目錄作爲命令行參數在c

我希望用戶通過命令行參數輸入目錄。

我已經使用

char SrcPath[] = argv[1]; 

然而,當我硬編碼像

char SrcPath[] = "home/user/Desktop/cat"; it works fine. 

但這不起作用,有誰能夠解釋爲什麼/提示的方式做到這一點? 是否有一種特殊的方式,在CLI中使用時必須輸入目錄?

+1

當您嘗試從命令行獲取目錄時,會出現什麼錯誤? – Irisshpunk

+0

我剛剛得到我的「無法打開目錄」的消息,當發現目錄時出現錯誤 – juzuze

+0

我認爲每個人都假設但從未提及過:您明白「home/user/Desktop/cat1」是相對路徑而不是絕對路徑,對嗎?除非該目錄可從程序啓動位置(位於根目錄「/」)到達,否則無法將目錄更改爲目錄。 –

回答

0

argv[]是一個char指針數組,因此當您使用argv[1]時,您正在獲取數組中的第二個項,它是一個char指針。正如詹姆斯建議,如果你想存儲argv[1]這是一個內存地址的值,你必須使用相同的類型,在這種情況下是char *

如果您需要保存任何類型的處理或操作的目錄路徑,您將需要做這樣的事情來將命令行參數存儲在char數組中。

char srcPath[100]; 
int i; 
for (i = 0; argv[1][i] != '\0'; i++) { 
    srcPath[i] = argv[1][i]; 
} 

陣列名稱因此使用下標[]解引用它的指針。字符數組也可以這麼說,它存儲在argv[]的內部

+0

非常感謝回覆,但我仍然收到同樣的錯誤。 – juzuze

+0

aOpenDir = opendir(SrcPath); if(!aOpenDir) printf(「\ n ERROR!Directory can not be open」); 當我嘗試執行程序時,我正在輸入 ./a.out「home/user/Desktop/cat1」這可能是問題嗎? – juzuze

+0

我需要看到更多的源文件,看看發生了什麼。 opendir是否返回NULL? opendir假設返回一個指向已打開目錄的指針流,如果發生錯誤,則返回NULL – Anatzum

3

使更改爲char *SrcPath = argv[1];應該工作。指針和數組是不同的東西!

+0

你可以點這裏詳細說明:http://stackoverflow.com/questions/1335786/c-differences-between-char-pointer-and-array – Irisshpunk

+0

謝謝你的迴應,但我仍然遇到同樣的問題 aOpenDir =執行opendir(SrcPath);如果(!aOpenDir)printf(「\ n ERROR!目錄無法打開」);當我嘗試執行程序時,我輸入./a.out「home/user/Desktop/cat1」,這可能是問題嗎? – juzuze