문제

특정 인수가 존재하는지 여부에 따라 다음과 같은 여러 가능한 인수 목록 중 하나에 위임하고 싶습니다.

./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid

그리고 이 작업을 깔끔하게 수행하기 위해 제가 생각할 수 있는 가장 좋은 방법은 다음과 같습니다. main() 모든 공통 옵션을 처리하고 나머지를 처리하기 위해 호출할 함수를 결정합니다.

공통 옵션이 먼저 발생하도록 순서를 제한하고 싶지는 않습니다.

내 문제는 재설정하면 optind 인수를 두 번째로 구문 분석하기 전에 1로 변경하고, getopt_long 잘못된 문자열을 전달하여 세그폴트를 발생시킵니다. strncmp - 그래서 optind를 건드리면 안 될 것 같아요.

나는 Google을 가지고 있었고 뛰어 다닐 수 있는지 여부에 대한 참조를 찾을 수 없습니다. getopt_long 인수 목록(가능한 것으로 알고 있습니다. getopt) 그렇다면 어떻게 해야 합니까?

비표준 라이브러리를 사용하지 않는 것이 좋습니다.(언어는 일반 c입니다. C++는 사용하지 마세요.)

도움이 되었습니까?

해결책

내 문제는 내가 마지막 행을 설정하지 않았다는 것입니다. static struct option long_options[] 배열을 0으로 설정하고 이를 올바르게 설정하면 오류가 수정됩니다.

GNU getopt도 필요합니다. optind 내부 상태를 올바르게 재설정하려면 1이 아닌 0으로 재설정되어야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top