C语言 使用argv元素的问题



我需要获取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

最新更新