В классе структур данных, который я сейчас принимаю, нам было поручено написать веб-искатель на С++. Чтобы дать нам начало, профессор предоставил нам программу для получения источника из заданного URL-адреса и простого анализатора HTML, чтобы удалить теги. Основная функция для этой программы принимает аргументы и поэтому использует 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.
Может быть, мой С++ несколько ржавый, но я, похоже, вспоминаю, что argv эквивалентен argv [0], в основном это означает, что он проверяет наличие аргументов. Кроме того, у меня создалось впечатление, что argv [0] всегда (по крайней мере, в большинстве реализаций) содержал имя запускаемой программы. Мне кажется, что argv [0] может быть нулевым, если argc равно 0, но при поиске в Google я не смог найти ни одного сообщения, определяющего, возможно ли это.
И поэтому я обращаюсь к вам. Что именно такое окончательное, если проверка блока?
РЕДАКТИРОВАТЬ:. Я пришел к рассуждениям, приведенным в комментариях к выбранному ответу, что может быть возможно преднамеренно привести к тому, что argv [0] станет NULL или иначе станет NULL на основе специфичная для платформы реализация основного.