Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Программа на С читает эти элементы, используя аргументы функции main(). В листинге 11.31 приведен типичный пример.
468 глава 11
Рис. 11.7. Аргументы командной строки
Листинг 11.31. Программа repeat, с
Скомпилируйте программу в исполняемый файл repeat. Вот что происходит, когда вы запускаете ее в командной строке:
Orepeat Все будет хорошо •
Количество аргументов, указанных в командной строке: 3
1: Все
2: будет
3: хорошо
Вы уже поняли, почему программа называется repeat (“повторить”), и наверняка хотите узнать, как она работает. Ниже приведены необходимые пояснения.
Компиляторы С позволяют функции main() не принимать аргументов либо иметь два аргумента. (Некоторые реализации разрешают принимать дополнительные аргументы, но это считается расширением стандарта.) В случае двух аргументов первым является количество элементов в командной строке. По традиции (хотя и не обязательно) этот аргумент типа int называется argc (от argument count — количество аргументов). Для выяснения, где заканчивается один элемент и начинается другой, система применяет пробелы. Таким образом, в запуске repeat присутствуют четыре элемента, включая имя команды, а в запуске fuss — три. Программа сохраняет элементы командной строки в памяти и помещает адреса элементов в массив указателей. Адрес этого массива сохраняется во втором аргументе. По соглашению этот указатель
Символьные строки и строковые функции 469
на указатели имеет имя argv (от argument values — значения аргументов). Когда возможно (в некоторых операционных системах это не разрешено), элементу argv [0] присваивается имя самой программы. Затем элементу argv [1] присваивается первый из следующих далее элементов командной строки и т.д. В рассматриваемом примере мы имеем следующие отношения:
argv [0] указывает на repeat (в большинстве систем)
argv [1] указывает на Все
argv [2] указывает па будет
argv[3] указывает на хорошо .
В листинге 11.31 с помощью цикла for элементы командной строки выводятся по очереди. Вспомните, что спецификатор %s для printf() ожидает предоставления в аргументе адреса строки. Каждый элемент — argv [0], argv [1] и т.д. — является таким адресом.
Данная форма аналогична форме любой другой функции, принимающей формальные аргументы. Многие программисты используют другое объявление для 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] ) не производится.
Читать дальшеИнтервал:
Закладка: