我需要在argv中获取所有参数并将其用于不同的porpuse,程序条目将是这样的
./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 ejec\n");
/*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 lib\n");
}
return 0;
}
但是当我在argv中占据任何位置时,只显示参数的第一个字符/数字
在示例中,它将显示:
[-,1,-,h,-,e]
我怎么能拿走所有的元素?
抱歉,如果我没有解释得那么好......英语不是我的主要语言
答案 0 :(得分:0)
您正在将argv
中的项目复制到char
数组。您需要使用char *
数组(如果您确实要复制argv
,或者您可以自己使用argv
)
接受以特定顺序传递给您的程序的args似乎也不合适。你应该遵循迭代所有args的模式,当你遇到一个选项(例如-m
)时,你选择下一个项作为选项值。
答案 1 :(得分:0)
仔细查看for
循环。请记住,C风格的字符串是以null结尾的char数组。通过取消引用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