我需要获取argv中的所有参数并将其用于不同的目的,程序条目将像这样
./program -t <a number> -d <a string> -m < a char, e or l >
IE: ./program -t 10 -d have/a/nice/day -m e
我正在做的是:
int main(int argc, char *argv[]){
int i,nt;
char aux[6];
for (i=0;i<6;i++){
aux[i] = *((char*)argv[i+1]);
}
nt=(int)aux[1]-'0';
printf("%d",nt);
printf("%c",aux[1]);
pthread_t threads[nt];
if (aux[5]=='e'){
printf("mode ejecn");
/*for (i=0;i<nt;i++){
pthread_create (&threads[i],NULL,(void *)operacion,NULL);
for (i=0;i<nt;i++){
pthread_join (threads[i],NULL);
}
}*/
}else if(aux[5]=='l'){
printf("mode libn");
}
return 0;
}
但是当我在argv中取任何位置时,只显示参数的第一个字符/数字
在示例中,它将显示如下:
[-,1,-,h,-,e]
如何取所有元素?
对不起,如果我没有解释得这么好…英语不是我的主要语言
您正在将argv
中的项复制到char
数组中。你需要有一个char *
数组代替(如果你真的想复制argv
或者你可以使用argv
本身)
同样,接受按特定顺序传递给程序的参数似乎也不对。你应该遵循一种模式,比如迭代所有的参数,当你遇到一个选项(例如:-m
)选择下一项作为选项值。
仔细查看for
循环。记住,c风格的字符串是以空结束的字符数组。通过对argv[i+1]
给出的指针解引用,您将获得该字符串的第一个字符。
会有什么不同的目的呢?除了特殊情况,您只需直接阅读argv
即可。但是,如果你真的想单独存储,你可以这样做
char *aux[6];
for (i=0;i<6;i++){
aux[i] = argv[i+1];
}
处理不同数组中的指针。或者你也可以写
char *aux[6];
for (i=0;i<6;i++){
aux[i] = strdup(argv[i+1]);
}
将参数的副本存储在该数组中(之后需要free
这些,因为strdup
为新字符串分配内存)。修改argv
所指向的字符串也是可以的。
最后,我建议您阅读getopt
库([1]和[2]),用于解析命令行选项。
[1] https://en.wikipedia.org/wiki/Getopt
[2] https://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html