2013-02-04 19 views
-1

可能重複:
getopt_long() — proper way to use it?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) 

這麼久選項的作用,總之,兩個' - '(爲什麼?)和短期選擇不會工作(printf打印NULL),這是爲什麼?非常感謝。

+2

什麼_are_短選項?請包括'short_options'。 –

+2

有趣的是,你省略了最相關的一段代碼;) –

+0

const char * const short_options =「hn」; – ale

回答

4

你需要通過一個簡短的字符串的選擇也一樣,這樣的事情:

const char *short_options ="hn:"; 

注意:意味着-n接受一個參數。