120

argv[argc]は常にのように見えるNULLので、引数リストは なしでトラバースできると思いますargc。単一のwhileループでこれを行います。

NULLの最後に必ず がある場合argv、なぜ が必要なのargcですか?

4

5 に答える 5

107

はい、argv[argc]==NULL保証されます。C11 5.1.2.2.1 プログラムの起動を参照(強調)

それらが宣言されている場合、メイン関数のパラメーターは次の制約に従う必要があります。

argc の値は非負でなければなりません。 argv[argc] は null ポインターでなければなりません。

したがって、提供するargcことは不可欠ではありませんが、それでも有用です。特に、正しい数の引数が渡されたことをすばやく確認できます。

編集: C++ を含めるように質問が修正されました。n3337 ドラフト3.6.1 メイン関数は言う

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

于 2013-08-31T10:28:10.420 に答える
19

これは歴史的な理由と、古いコードとの互換性のためです。もともと、argv 配列の最後の要素として null ポインターが存在するという保証はありませんでした。しかし、argc は常に存在していました。

于 2013-08-31T12:31:57.667 に答える