Чтение онлайн

на главную - закладки

Жанры

Язык Си - руководство для начинающих

Д. МАРТИН

Шрифт:

РИС. 13.5. Указатели сортируемых строк.

или, может быть,

А > fuss

с использованием двух системных приглашений.

Аргументы командной строки являются дополнительными элементами в той же самой строке:

%fuss - r Ginger

Следует заметить, что программа на языке Си может вводить информацию в эти элементы и применять их для собственных нужд. Этот механизм предназначен для использования аргументов функции main. Вот типичный пример:

/* main с аргументами */

main(argc, argv)

int argc;

char *argv[ ];

{

int count;

for(count = 1; count < argc; count++)

printf(" %s", argv[count]);

printf("\n");

}

Поместите

эту программу в выполняющий файл, названный echo, и вот что произойдет:

А > echo 

Я мог бы воспользоваться небольшой помощью.

Я мог бы воспользоваться небольшой помощью.

Вероятно, вы видите, почему функция называется echo, но еще не можете понять, как она работает. Может быть, это объяснение поможет вам (мы надеемся).

Компиляторы Си предполагают наличие у main двух аргументов. Первый аргумент представляет количество строк, следующих за командным словом. Обычно (но не обязательно) этот аргумент типа int называется argc (argument count). Система использует пробелы, чтобы сообщить о конце одной строки и начале следующей. Так, наш пример с echo имеет шесть строк, а пример с fuss имел две строки. Второй аргумент является массивом указателей строк. Каждой строке, входящей в командную строку, присваивается ее

собственный указатель. По соглашению, этот массив указателей называется argv (argument values). Если можно (некоторые операционные системы не позволяют этого), элементу argv[0] присваивается имя самой программы. В этом случае аргументу argv[l] присваивается первая следующая строка и т. д. Для нашего примера имеем

argv[0] ссылается на echo (для большинства систем)

argv[1] ссылается на я

argv [2] ссылается на мог

argv [6] ссылается на помощью

Поскольку вы используете эти обозначения, то можете легко проследить остаток программы.

РИС. 13.6. Аргументы командной строки.

Многие программисты используют для argv и другие обозначения:

main(arge, argv)

int arge;

char **argv;

Описание argv

на самом деле эквивалентно char *аrgv[ ];. Читая его, вы могли бы сказать, что argv является указателем на указатель на типchar. Наш пример дает то же самое. У нас был массив из семи элементов. Имя массива является указателем на его первый элемент. Поэтому argv ссылается на argv[0], a argv[0] является указателем на тип char. Следовательно, даже с исходным определением argv является указателем на указатель на тип char. Вы можете использовать любую из этих форм, но видно, что первая проще для понимания.

Очень часто аргументы командных строк используются для указания возможностей программы. Например, можно применять комбинацию символов - r, чтобы заставить программу выполнять сортировку в обратном порядке. Обычно альтернативы задаются при помощи дефиса и буквы, как - r. Эти "флажки" ничего нс означают в языке Си; вы должны сами запрограммировать их распознавание.

Вот очень простой пример, показывающий, как программа может проверять и использовать флажок.

/* обычное начало */

#define YES 1

#define NO 0

main(argc, argv)

int argc;

char *argv[ ];

{

float array[100];

int n;

int flag = NO;

if(argv[l][0] == '-' && argv[l][l] == 'r')

flag = YES;

...

if flag = NO

sort1(array, n);

else

sort2(array, n);

...

}

Эта программа проверяет первую строку после имени командного файла, чтобы посмотреть, начинается ли она с дефиса. Затем она проверяет, является ли следующий символ кодом буквы r. Если это так, то устанавливается флажок, приводящий к использованию другой программы сортировки. Строки после первой игнорируются. Как мы уже сказали, этот пример достаточно прост.

Если вы использовали систему UNIX, то, вероятно, заметили, что команды UNIX предоставляют разнообразные варианты командной строки и ее аргументов. Эти примеры показывают, как использовать аргументы командной строки языка Си, поскольку большая часть системы UNIX написана на языке Си.

Аргументы командных строк могут быть также именами файлов, и вы можете использовать их вместо операторов переключения, чтобы указать программе, над какими файлами надо работать. Мы покажем вам, как это делается, в гл. 15.

Поделиться:
Популярные книги

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Камень Книга одиннадцатая

Минин Станислав
11. Камень
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Камень Книга одиннадцатая

Никто и звать никак

Ром Полина
Фантастика:
фэнтези
7.18
рейтинг книги
Никто и звать никак

Возвышение Меркурия. Книга 14

Кронос Александр
14. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 14

Идеальный мир для Лекаря 20

Сапфир Олег
20. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 20

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Сумеречный Стрелок 2

Карелин Сергей Витальевич
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 2

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10