【问题标题】:getopt_long long options work but not short options [duplicate]getopt_long 长选项有效,但短选项无效[重复]
【发布时间】:2013-02-05 02:21:28
【问题描述】:

可能重复:
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),这是为什么?非常感谢。

【问题讨论】:

  • 什么是短选项?请同时包含short_options。
  • 有趣的是你省略了最相关的一段代码;)
  • const char * const short_options = "hn";
  • 如果你想得到-option而不是--option,使用getopt而不是get_long_opt

标签: c getopt getopt-long


【解决方案1】:

您还需要传递一个简短的选项字符串,如下所示:

const char *short_options ="hn:";

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2015-09-06
    相关资源
    最近更新 更多