2013-02-04 5 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) 

너무 오래 옵션이 작동, 짧은 것은 두 가지로 (왜?) 짧은 옵션은하지 않습니다. 작업 (printfNULL 인쇄), 이유가 무엇입니까? 많은 감사합니다.

const char *short_options ="hn:"; 

참고가 :-n 인수를 받아들이는 의미

+2

짧은 옵션은 무엇입니까? 'short_options'도 포함하십시오. –

+2

코드 중 가장 관련있는 부분을 생략 한 재미 있습니다.) –

+0

const char * const short_options = "hn"; – ale

답변

4

당신은 너무 짧은 옵션 문자열을 전달하기 위해이 같은 일을해야합니다.