2012-07-13 5 views
0

코드에 명령 줄 옵션을 구현하려고합니다. 어떤 이유로, -a 옵션은 올바르게 작동하지만, -c 옵션은 기본적으로 동일하더라도 잘 작동하지 않습니다. -c 옵션을 사용하여 코드를 실행하려고하면 다음 메시지가 표시됩니다.명령 줄 인수 문제

terminate called after throwing an instance of 'std::logic_error' 
what(): basic_string::_S_construct NULL not valid 
Aborted 

아래 코드는 제 코드입니다.

int c; 
std::string config = def+std::string("SamplesConfig.xml"); 
std::string cal = def+std::string("calibration.bin"); 
while ((c = getopt(argc, argv, "a:c"))>=0) 
{ 
    switch(c) 
    { 
     case 'a': 
     { 
      config = std::string(optarg); 
      printf("%s", (char *)config.c_str()); 
      break; 
     } 
     case 'c': 
     { 
      cal = std::string(optarg); 
      printf("%s", (char *)cal.c_str()); 
      break; 
     } 
     default: 
     { 
      break; 
     } 
    } 
} 
+0

이것을 조금 줄일 수 있습니까? 어떤 코드 줄이 실제로 오류를 던지고 있는지 알고 있습니까? 디버깅 해 봤어? – SirPentor

답변

0

getopt ("a : b : c :")를 호출하면 안됩니까? 나는 당신이 단지 c를 지정 했으므로 optarg는 그 점에 도달하면 null이 될 것이라고 상상한다.

+0

감사. 커맨드 라인 인수를 사용한 것은 이번이 처음 이었기 때문에 콜론으로 끝내야한다는 것을 깨닫지 못했습니다. – user1469474

+1

글쎄, 할 필요는 없지만 생략하면 'c'를 인수를 취하지 않는 옵션으로 취급한다는 의미입니다. a : c는 -a가 인수를 취하고 -c가 인수를 취한다는 것을 의미하지만 a : c는 -a가 인수를 취하지 만 -c는 인수를 취하지 않음을 의미합니다. –