1. ホーム
  2. c++

[解決済み] argvの最後には常にNULLがあるのに、なぜargcが必要なのでしょうか?

2022-08-25 02:32:24

質問

どうやら argv[argc] は常に NULL を使わずに引数リストをたどることができると思います。 argc . 単一の while ループがこれを行います。

もし、常に NULL の末尾に argv が必要なのはなぜでしょうか? argc ?

どのように解決するのですか?

はい。 argv[argc]==NULL は保証されています。 参照 C11 5.1.2.2.1 プログラムスタートアップ (私の強調)

宣言されている場合、主関数のパラメータは以下の制約に従わなければならない。 を守らなければならない。

argcの値は非負でなければならない。 argv[argc]はヌルポインタでなければならない。 ポインタでなければならない。

提供する argc を提供することは重要ではありませんが、それでも有用です。 特に、正しい数の引数が渡されたかどうかを素早くチェックできるようになります。

編集: 質問はC++を含むように修正されました。 n3337草案 3.6.1 メイン関数 が言っています。

2 ...argcは、プログラムが実行される環境からプログラムに渡される引数の数でなければならない。 引数の数である。.... argcの値 の値は非負でなければならない。 argv[argc]の値は0でなければならない。 .