1

クラスのスケルトン コードのセクションを理解しようとしています。使用目的は次のとおりです。

./a.out -d -n Foo -i Bar

スケルトン コードは正常に動作しますが、使用getopt()したことがなく、なぜそれが正しく動作するのか理解できません (割り当てとは関係がないことを理解しています。意味を理解したいだけです)。whileループを更新/終了するのはどうですか? ポインターのインクリメントや、ループで渡された引数がまったく変更されていません。

char *optString = "-d-n:-i:";
int opt = getopt(argc, argv, optString);

while (opt != -1) {
    switch(opt) {
    case 'd':
        debug = 1;
        break;
    case 'n':
        nameserver_flag = 1;
        nameserver = optarg;
        break;
    case 'i':
        hostname = optarg;
        break;
    case '?':
        usage();
        exit(1);
    default:
        usage();
        exit(1);
    }
    opt = getopt(argc, argv, optString);
}
4

2 に答える 2

2

getoptグローバル変数を使用して、引数のインデックス、解析する次の文字、およびその他の情報を格納します。を呼び出すたびgetoptに、関数はこれらの変数をチェックして、最後にどこにあったか (またはユーザーが指定した場所) を把握し、次の呼び出しのために変数を更新します。

最も重要なのは、次にスキャンする要素optindのインデックスを格納することです。argv

于 2013-09-26T04:55:26.877 に答える