C使用getopt_long()

时间:2013-02-01 14:05:03

标签: c parsing getopt

我一直在阅读如何使用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()

提前致谢

1 个答案:

答案 0 :(得分:2)

引用man getopt_long

  

getopt_long()功能的作用类似于getopt(),但它也是如此     接受长选项,以两个破折号开头。

  

getopt_long_only()like getopt_long(),但---可以     表示长期选择。

因此,您应该使用--cp--fc,或者切换到getopt_long_only