getopt_long을 사용하여 C++ 응용 프로그램에서 명령 줄 인수를 처리하고 있습니다. 예제는 처리 예에서 모두 printf("Username: %s\n", optarg)
과 같은 것을 보여줍니다. 이것은 예제를 보여주는 데는 좋지만 나중에 사용할 값을 실제로 저장할 수 있기를 원합니다. 코드 나머지 부분의 대부분은 char*
대신에 string
개체를 사용하므로 optarg의 내용을 문자열로 캐스팅/복사 /해야합니다.optarg를 C++ 문자열 객체로 가져 오기
string bar;
while(1) {
c = getopt_long (argc, argv, "s:U:", long_options, &option_index);
if (c == -1) break;
switch(c)
{
case 'U':
// What do I need to do here to get
// the value of optarg into the string
// object bar?
bar.assign(optarg);
break;
}
}
위의 코드는 컴파일하지만 그것이 내가의 printf를 사용하여 바의 값을 인쇄하려고하면 내가 Illegal instruction
오류가 실행할 때 (cout을 위해 잘 작동하는 것 같다).
// Runs just fine, although I'm not certain it is actually safe!
cout << " bar: " << bar << "\n";
// 'Illegal instruction'
printf(" bar: %s\n", bar);
불법적 인 명령이 무엇인지 파악하기 위해 명령 줄 디버깅에 대해 충분히 알지 못합니다. 나는 valgrind를 실행하고 있었지만이 오류로 인해 발생하는 엄청난 양의 메모리 오류로 인해이 오류의 원인을 정확히 찾아 낼 수 없었습니다.
나는 이것을 기억해야 할 중요한 목록에 넣어야 할 것 같습니다. 감사! –