getopt_long长选项有效,但不是短选项

时间:2013-02-04 14:53:19

标签: c getopt getopt-long

  

可能重复:
  getopt_long() — proper way to use it?

我在我的C程序中遇到了getopt_long。代码:

const struct option long_options[] = { 
    { "help", 0, NULL, 'h' },
    { "num", 1, NULL, 'n' },
    { NULL, 0, NULL, 0 } 
};  
do {
    next_option = getopt_long(argc, argv, short_options, 
        long_options, NULL);
    switch(next_option) {
        case 'h':
            print_usage(stdout, 0); 
        case 'n':
            printf("num %s\n", optarg);
            break;
        case '?':
            print_usage(stderr, 1); 
            break;
        default:
            abort();
    }   
} while(next_option != -1);

这有效:

./a.out --num 3
num 3

这有效(为什么?!):

./a.out --n 3            
num 3

这不是:

./a.out -n 3  
num (null)

这么长的选项有效,只有两个' - '(为什么?)而短选项不起作用(printf打印NULL),为什么是这样?非常感谢。

1 个答案:

答案 0 :(得分:4)

你也需要传递一个短选项字符串,如下所示:

const char *short_options ="hn:";

注意:表示-n接受参数。