0

特定の引数が存在するかどうかに基づいて、次の行に沿って、いくつかの可能な引数のリストの1つに委任したいと思います。

./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、無効な文字列をに渡してsegfaultが発生するstrncmpことです。したがって、optindをいじってはいけないと思います。

私はグーグルを持っていて、引数リストを飛び回ることが可能かどうかについての参照を見つけることができませんgetopt_long(私はそれが可能であることを知っていますgetopt)、もしそうなら、どうすればいいですか?

非標準のライブラリは使用したくない。(言語はプレーンcです。c++は使用しないでください)

4

1 に答える 1

1

私の問題は、static struct option long_options[]配列の最後の行をゼロに設定していなかったことです。これを設定すると、エラーが正しく修正されます。

また、GNU getoptはoptind、内部状態を正しくリセットするために、1ではなく0にリセットする必要があります。

于 2010-07-16T12:30:35.080 に答える