我正在構建一個程序,將目錄相互複製,但我只能讓它工作硬編碼。輸入目錄作爲命令行參數在c
我希望用戶通過命令行參數輸入目錄。
我已經使用
char SrcPath[] = argv[1];
然而,當我硬編碼像
char SrcPath[] = "home/user/Desktop/cat"; it works fine.
但這不起作用,有誰能夠解釋爲什麼/提示的方式做到這一點? 是否有一種特殊的方式,在CLI中使用時必須輸入目錄?
我正在構建一個程序,將目錄相互複製,但我只能讓它工作硬編碼。輸入目錄作爲命令行參數在c
我希望用戶通過命令行參數輸入目錄。
我已經使用
char SrcPath[] = argv[1];
然而,當我硬編碼像
char SrcPath[] = "home/user/Desktop/cat"; it works fine.
但這不起作用,有誰能夠解釋爲什麼/提示的方式做到這一點? 是否有一種特殊的方式,在CLI中使用時必須輸入目錄?
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[]
的內部
使更改爲char *SrcPath = argv[1];
應該工作。指針和數組是不同的東西!
你可以點這裏詳細說明:http://stackoverflow.com/questions/1335786/c-differences-between-char-pointer-and-array – Irisshpunk
謝謝你的迴應,但我仍然遇到同樣的問題 aOpenDir =執行opendir(SrcPath);如果(!aOpenDir)printf(「\ n ERROR!目錄無法打開」);當我嘗試執行程序時,我輸入./a.out「home/user/Desktop/cat1」,這可能是問題嗎? – juzuze
當您嘗試從命令行獲取目錄時,會出現什麼錯誤? – Irisshpunk
我剛剛得到我的「無法打開目錄」的消息,當發現目錄時出現錯誤 – juzuze
我認爲每個人都假設但從未提及過:您明白「home/user/Desktop/cat1」是相對路徑而不是絕對路徑,對嗎?除非該目錄可從程序啓動位置(位於根目錄「/」)到達,否則無法將目錄更改爲目錄。 –