私が現在受講しているデータ構造クラスでは、C++でWebクローラーを作成する必要があります。有利なスタートを切るために、教授は、指定されたURLからソースを取得するプログラムと、タグを取り除くための単純なHTMLパーサーを提供してくれました。このプログラムのmain関数は引数を受け入れるため、argc/argvを使用します。引数のチェックに使用されるコードは次のとおりです。
// Process the arguments
if (!strcmp(option, "-h"))
{
// do stuff...
}
else if (!strcmp(option, ""))
{
// do stuff...
}
else if (!strcmp(option, "-t"))
{
// do stuff...
}
else if (!strcmp(option, "-a"))
{
// do stuff...
}
if ( *argv == NULL )
{
exit(1);
}
「option」にargv[1]のスイッチが設定されており、argv[2]以降には残りの引数があります。私が理解している最初のブロックは、スイッチが文字列と等しい場合、スイッチに基づいて何でも実行します。最後のifブロックの目的は何なのか気になります。
私のC++はやや錆びている可能性がありますが、*argvはargv[0]と同等であり、基本的には引数が存在することを確認していることを思い出しているようです。argv [0]には常に(少なくともほとんどの実装では)実行中のプログラムの名前が含まれているという印象を受けた場合を除きます。argcが0の場合、argv [0]がnullになる可能性がありますが、Googleで検索しても、それが可能かどうかを判断する投稿は1つも見つかりませんでした。
そして、私はあなたに目を向けます。ブロックチェックの場合、その最終的なものは正確には何ですか?
編集:選択した回答のコメントに記載されている理由を使用しました。プラットフォーム固有のmainの実装に基づいて、意図的にargv [0]をNULLにするか、そうでなければNULLにする可能性があるということです。