2013-04-25 2 views
0

getopt를 사용하여 Unix 명령 줄에서 전달 된 인수 값을 인쇄하는 C 프로그램을 작성했습니다 (Google에서 복사 및 붙여 넣기).유닉스 명령 줄에서 실행할 때 getopt가 올바르게 작동하지 않습니다.

유닉스 명령 행에서

:

./myprog -a 0 -b 1 -c 2 

내 C 코드는 다음과 같습니다

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char *argv[]) 
{ 
    int i; 

    while ((i = getopt(argc, argv, "abc")) != -1) { 
     switch (i) { 
      case 'a': 
       printf("A = %s\n", optarg); 
       break; 

      case 'b': 
       printf("B = %s\n", optarg); 
       break; 

      case 'c': 
       printf("C = %s\n", optarg); 
       break; 

      default: 
       break; 
     } 
    } 

    return 0; 
}  

내가 예를 들어, 전달 된 각각의 값을 출력 할 프로그램하려면

A = 0 
B = 1 
C = 2 

그러나 아무것도 인쇄하지 않습니다.

+0

":"에 대해 잊어 버렸습니다 –

답변

3

인수가있는 옵션 뒤에 ":"이 표시되지 않습니다. 한 줄

while ((i = getopt(argc, argv, "a:b:c:")) != -1) { 

을 변경할 경우에는 변형 작업을 진행하게됩니다.

제대로 man 3 getopt 읽기, 그것은 getopt

것을 ... optstring이 합법적 옵션 문자를 포함하는 문자열의 세 번째 인수에 대해 말했다. 이러한 문자 다음에 콜론이 오면 옵션에 인수가 필요하므로 getopt()는 동일한 argv 요소에있는 다음 텍스트 나 다음 argv 요소의 텍스트에 대한 포인터를 optarg에 배치합니다. 두 콜론은 옵션 이 선택적 arg를 취하는 옵션을 의미합니다. 현재 argv 요소 (예 : "-oarg"와 같은 옵션 이름 자체와 동일한 단어)에 텍스트가있는 경우 이 optarg에 반환됩니다. 그렇지 않으면 optarg가 0으로 설정됩니다. ...

+0

Thanks @Eddy_Em. 그것은 그것을 고쳤다. 예를 들어 내가 원래 가지고있는 것과 같은 병합 병합의 사용에 대해 궁금한 점은 getopt 예제가 많이있는 형식을 보았습니다. "a : bc : d : ef". bc와 반대로 bc는 무엇을 의미합니까? – stevo

+0

BTW'man 3 getopt'에는'getopt'와'getopt_long'의 두 가지 사용 예제가 있습니다. –

관련 문제