0

次を使用して呼び出す必要があるプログラムがあります。

program parameter1 parameter2 -x1 -y

しかし、私がそうすればうまくいくはずだと思います:

program -x1 -y parameter1 parameter2

またはそれらの組み合わせ。どうすれば恐ろしい汚いハックなしで手parameter1に入れることができますか? parameter2現時点では、

while ((c = getopt (argc, argv, "x:y")) != -1){
   /* do stuff */
}

オプションの引数のループですが、他の引数はどうですか? argv[1]どこにでもある可能性があるため、 andだけを見るのは間違っているように思えargv[2]ます。

これには確立された解決策があると確信しています。

4

1 に答える 1

2

whileループを終了した後optind、最初の非オプション引数を指します。getopt(3)マニュアルページを見てください:

   If  there  are  no  more option characters, getopt() returns -1.  Then optind is the
   index in argv of the first argv-element that is not an option.

したがって、最初の非オプション引数は次argv[optind]のようになります。

while ((c = getopt (argc, argv, "x:y")) != -1){
   /* do stuff */
} 

param1 = argv[optind]
param2 = argv[optind+1]

getoptオプション引数が非オプション引数の後にコマンドライン上にある最初の例でもこれが当てはまるように、引数を並べ替えます。

于 2012-08-03T13:09:07.783 に答える