我正在构建一个程序,将目录相互复制,但我只能让它工作硬编码。输入目录作为命令行参数在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”是相对路径而不是绝对路径,对吗?除非该目录可从程序启动位置(位于根目录“/”)到达,否则无法将目录更改为目录。 –