【问题标题】:C using getopt_long()C 使用 getopt_long()
【发布时间】:2013-02-01 14:05:03
【问题描述】:

我一直在阅读如何使用getopt_long(),以及如何使用 optlong 来“阅读”多个字符选项。

我需要从终端解析以下条目:

./bomb –n String –cp Integer –i Integer –c Integer –fc String

所以在我使用 getoptlong 之前,我定义了我的短选项和长选项:

 if(argc != 11){
    perror("Error en numero de argumentos \n");
    exit(EXIT_FAILURE);
 }

 const char* const short_options = "n:i:c:";
 static struct option long_options[] = {
    {"cp", 1, NULL, 'a'},
    {"fc", 1, NULL, 'b'},
    {0, 0 , 0, 0}
 };

我的short_options 使用参数选择n(这就是: 的用途),ci 也是如此。 因此,长选项也应如此(它们也都选择参数)。

    while(opt != -1){

        opt = getopt_long(argc, argv, short_options, long_options, NULL);

        switch (opt){   
           case 'n':
           //print it

           case 'a':
          //print it
         } 
    }

现在的问题是,这段代码非常适合解析 -c -i-n 时,它会输入它所属的案例并正确打印。 我的问题,它不适用于-cp-fc。而且我真的不知道如何解决这个问题,因为我之前没有使用过getopt()

提前致谢

【问题讨论】:

    标签: c parsing getopt


    【解决方案1】:

    引用man getopt_long:

    getopt_long() 函数的工作方式与 getopt() 类似,只是它还 接受长选项,以两个破折号开头。

    getopt_long_only()like getopt_long(),但 --- 可以 表示一个长选项。

    所以你应该要么使用--cp--fc,要么切换到getopt_long_only

    【讨论】:

    • getopt_long_only 既可以读取单个字符选项 (-n -i ) 也可以读取多个字符选项 (-cp -fc)?
    • @Alessandroempire 你试过自己阅读手册吗?
    • 好的,我使用了 getopt_long_only ,因为它的行为类似于。所以现在它进入 cp 案例,但不是 fc。这很奇怪。问题:当我声明我的 long_options 时,当它遇到 -fc 时它会返回 a b 吗?
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2017-02-19
    • 2015-04-30
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多