Данная форма аналогична форме любой другой функции, принимающей формальные аргументы. Многие программисты используют другое объявление для argv:
int main(int argc, char **argv)
Такое альтернативное объявление argv в действительности эквивалентно char *argv[]. Оно говорит о том, что argv представляет собой указатель на указатель на char. Рассматриваемый пример сводится к тому же. В нем содержится массив из семи элементов. Имя массива — это указатель на первый элемент, так что argv указывает на argv [0], a argv [0] является указателем на char. Следовательно, даже в исходном определении argv будет указателем на указатель на char. Вы можете применять любую форму, однако мы полагаем, что первая форма более ясно показывает, что argv представляет набор строк.
Многие среды, включая Unix и DOS, позволяют использовать кавычки для объединения нескольких слов в один аргумент. Например, команда
repeat "Я был здесь" давно
присваивает строку "Я был здесь" элементу argv [1], а строку "давно" — элементу
argv[2].
Аргументы командной строки в интегрированных средах
В интегрированных средах Windows, таких как Apple XCode, Microsoft Visual C++ и Embarcadero C++ Builder, для запуска программ командная строка не применяется. Тем не менее, в ряде сред предлагается диалоговое окно свойств проекта, которое позволяет указывать аргументы командной строки для конкретного проекта. В других случаях может быть возможность компиляции программы в IDE-среде, и затем открытия окна MS-DOS для запуска программы в режиме командной строки. Но задача упрощается, если система позволяет запускать компилятор командной строки, такой как GCCL
Аргументы командной строки в Macintosh
Если вы пользуетесь XCode 4.6 (или аналогичной версией), то для предоставления аргументов командной строки выберите в меню Products (Продукты) пункт SchemeoEdit Scheme^Run (Схема^Изменить схемуО Выполнить). В открывшемся диалоговом окне перейдите на вкладку Arguments (Аргументы) и введите аргументы в ноле Arguments Pass on Launch (Аргументы, передаваемые при запуске).
470 Глава 11
Или же можно переключиться в режим Terminal (Терминал), получив доступ к среде командной строки Unix. Затем можно либо перейти в каталог (так в Unix называют папку), содержащий исполняемый код программы, либо, если вы загрузили инструменты командной строки, воспользоваться компилятором gcc или clang, чтобы скомпилировать программу.
Преобразования строк в числа
Числа могут храниться либо как строки, либо в числовой форме. Хранение числа в виде строки означает хранение символов для цифр. Например, число 213 может быть сохранено в массиве символьной строки как цифры ‘2 ', '111 ‘3 ', '\0'. Хранение 213 в числовой форме означает его хранение как значения, скажем, типа int.
Числовые формы в С требуются для числовых операций, таких как сложение и сравнение, но отображение чисел на экране требует строковой формы, поскольку экран воспроизводит символы. Функции printf() и sprintf() посредством %d и других спецификаторов преобразуют числовые формы в строковые, а функция scanf() может преобразовывать вводимые строки в числовые формы. В С также имеются функции, единственным назначением которых является преобразование строковых форм в числовые.
Предположим, к примеру, что вам нужна программа для работы с аргументом командной строки. К сожалению, аргументы командной строки читаются как строки. Вследствие этого, чтобы иметь дело с числовым значением, сначала вы должны преобразовать полученную строку в число. Если число целое, можете применить функцию atoi() (от alphanumeric to integer — преобразование алфавитно-цифрового значения в целое число). Эта функция принимает строку в качестве аргумента и возвращает соответствующее целочисленное значение. В листинге 11.32 приведен пример использования.
Листинг 11.32. Программа hello.с

Вот результаты пробного запуска:
$ hello 3
Хорошего дня!
Хорошего дня!
Хорошего дня!
Символ $ — это приглашение в Unix и Linux. (В некоторых системах Unix применяется %.) Аргумент командной строки 3 был сохранен как строка 3\0.
Символьные строки и строковые функции 471
Функция atoi() преобразует эту строку в целочисленное значение 3, которое присваивается переменной times. Затем times задает количество итераций цикла for.
Если вы запустите эту программу без аргумента командной строки, проверка argc < 2 приведет к ее прекращению и выводу сообщения о способе использования программы. То же самое происходит, если переменная times равна 0 либо имеет отрицательное значение. Правило вычисления логических операций в С гарантирует, что при argc < 2 оценка atoi (argv [1] ) не производится.
Читать дальше