2015-04-23 25 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