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