无法使用getopt_long读取参数

时间:2014-03-17 22:45:53

标签: c getopt

我有以下代码。 但是当我使用--debug = 2运行它时,调试变量的值为100.我期待2 ... 我的错误在哪里? 代码如下:

  int debug=0;
  int opt;
  struct option longopts[] = {
    { "debug",    required_argument, &debug, 'd' }
  };
  while ((opt = getopt_long(argc, argv, "d", longopts, NULL))!= -1)
  {
    switch (opt)
    {
      case 'd':
        switch (debug)
        {
          case 1:
            logPrio = LOG_INFO;
            printf("1");
            break;
          case 2:
            printf("2");
            logPrio = LOG_CRIT;
            break;
        }    
    }
  }
 printf ("--%d--", debug);

1 个答案:

答案 0 :(得分:2)

&debug中指定longopts并不将选项的整数值存储到指定的地址,getopt_long希望您自己提取整数值。

根据the manualint *flag struct option成员完全不同:

  

flag"指定如何为长选项返回结果。 [如果   非NULL],getopt_long()返回0,标志指向变量   如果找到该选项,则设置为val,但如果保持不变则保持不变   找不到该选项。

您为&debug指定了flag,为'd'指定了val,因此debug设置为'd'(数字100){ {1}}已指定。由于您已将--debug的结果存储到getopt_long变量中,因此您根本不需要将opt存储在&debug中。相反,使用longopts变量将参数设为optarg

--debug