【问题标题】:Trouble with using argv elements使用 argv 元素的问题
【发布时间】:2014-07-15 10:47:36
【问题描述】:

我需要把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]

我怎样才能获取所有元素?

对不起,如果我没有解释得那么好......英语不是我的主要语言

【问题讨论】:

  • 正弦aux数组定义为charaux[i]只能容纳单个字符。不知道为什么需要它,因为argv 本身已经是一个可以直接使用的字符串数组。有关字符串数组的更多信息,请参阅c.learncodethehardway.org/book/ex10.html

标签: c multithreading argv


【解决方案1】:

您正在将argv 中的项目复制到char 数组。你需要有一个 char * 数组来代替(如果你真的想复制 argv 或者你可以使用 argv 本身)

此外,接受以特定顺序传递给程序的 args 似乎也不正确。你应该遵循一种模式,比如遍历所有参数,当你遇到一个选项(例如-m)时,你选择下一个项目作为选项值。

【讨论】:

    【解决方案2】:

    仔细查看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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2020-01-05
      相关资源
      最近更新 更多