0

重複の可能性:
getopt_long() — 正しい使い方は?

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)

長いオプションは機能し、短いオプションは 2 つの '-' で機能し (なぜ?)、短いオプションは機能しません (printf印刷NULL)、これはなぜですか? どうもありがとう。

4

1 に答える 1

5

次のような短いオプション文字列も渡す必要があります。

const char *short_options ="hn:";

:手段-nが引数を受け入れることに注意してください。

于 2013-02-04T15:06:02.903 に答える