さまざまなコマンドライン引数を取るプログラムがあります。-a
簡単にするために、 、-b
、およびの3 つのフラグが必要であると言い-c
、次のコードを使用して引数を解析します。
int c;
while((c = getopt(argc, argv, ":a:b:c")) != EOF)
{
switch (c)
{
case 'a':
cout << optarg << endl;
break;
case 'b':
cout << optarg << endl;
break;
case ':':
cerr << "Missing option." << endl;
exit(1);
break;
}
}
注: a と b は、フラグの後にパラメーターを取ります。
しかし、プログラムを次のように呼び出すと、問題が発生します
./myprog -a -b parameterForB
ここで、parameterForA を忘れました。parameterForA (optarg で表される) が返され-b
、parameterForB はパラメーターのないオプションと見なされ、optind は argv の parameterForB のインデックスに設定されます。
この状況で望ましい動作は':'
、 の引数が見つからなかった後に が返され-a
、Missing option.
標準エラーに出力されることです。ただし、これ-a
は、プログラムに渡された最後のパラメーターであるイベントでのみ発生します。
問題は次のとおりだと思います。getopt()
オプションが で始まらないと仮定する方法はあります-
か?