私は、視点を理解するためにgetoptを使用して簡単なコードを書いています。getopt:欠落している引数 ':'と無効な引数を認識できません '? '
問題がある:
(1)ケース1: case '?'
は、その後、コメント化されている場合:
[[email protected] getopt]# ./a.out -a -b -c
Option found: a, optind = 2
Option found: b, optind = 3
./a.out: option requires an argument -- c
、あなたが見ることができるよう、case ':'
はかかりませんでした通常は、欠落している引数がgetoptによって ':'(コロン)を返すことが予想されるため、効果があります。
(2)ケース2: AND、私はそれをアンコメントしている場合、その後、プログラムを実行し、それも引数が不足しているためcase '?
を打ちます。
enter code here
[[email protected] getopt]# ./a.out -a -b -c
Option found: a, optind = 2
Option found: b, optind = 3
./a.out: option requires an argument -- c
Didn't you enter an invalid option?
ここでは何が欠けていますか?
はLATER ADDED:
をまたなぜ./a.out: option requires an argument -- c
は、デフォルトのエラーが来ているのですか?私はすでにcase ':'
でそれを世話しているので、それを処理する方法は、デフォルトのエラーメッセージをしたくないですか? AGAIN
を追加しました:答えで示唆したように は、私がoptstringにの先頭にコロンを使用 - const char *optstring = ":abc:d"
、なぜこの出来事はありますか? man getoptから
./a.out -a -b -c -d returns -d as the argument to c?? -d is a separate optional character and not any argument
注意: 'const char optstring [] = ...;'を使うと、余分なポインタ間接指定が保存されます。 –