Меню сайта

Урок 36 Использование аргументов командной строки в C++


ДОСТУП Кargvargc

Если вы запускаете программу из системной подсказки, командная строка, которую вы вводите, становится вашей командной строкой:


С:&gt- COPY SOURCE.DOC TARGET.DOC &lt-ENTER&gt-

В данном случае командная строка указывает команду (COPY) и два аргумента (имя файлов SOURCE. DOC и TARGET. DOC). Чтобы разрешить вашей программе доступ к командной строке, C++ передает два параметра в функциюmain:

void main(int argc, char *argv[])

Первый параметр argc содержит количество элементов в массивеargv. -Например, в случае предыдущей команды COPY параметрargc -должен содержать значение 3 (он включает имя команды и два аргумента). Следующая программа SHOWARGC.CPP использует параметрargc -для вывода количества аргументов командной строки:

#include &lt-iostream.h&gt-

void main(int argc, char *argv[])

{
— — -cout &lt-&lt- «Количество аргументов командной строки равно» &lt-&lt- argc &lt-&lt- endl-
}

Выберите время для эксперимента с этой программой, вызывая ее с разным количеством параметров, как показано ниже:

С:&gt- SHOWARGC А В С &lt-ENTER&gt-

Количество аргументов командной строки равно 4

В зависимости от типа компилятор может рассматривать аргументы, которые группируются внутри двойных кавычек, в качестве одного аргумента:

С:&gt- SHOWARGC «Это один аргумент» &lt-ENTER&gt-

Количество аргументов командной строки равно 2

Рис. 36. Массивargv -указывает аргументы командной строки.

Второй параметр функцииmain с -именемargv -представляет собой массив указателей на символьные строки, которые содержат индивидуальные части командной строки. Например, рис. 36 иллюстрирует, как элементы массива —argv -могли бы указывать записи командной строки.

Следующая программа SHOWARGV.CPP использует операторfor -для вывода элементов массиваargv -(командная строка программы). Программа запускается с первого элемента массива (имя программы) и затем выводит каждый элемент, пока значение переменной цикла не станет больше, чемargc:

#include &lt-iostream.h&gt-

void main(int argc, char *argv[])

{
— — -int i-
— — -for (i = 0- i &lt- argc- i++) —cout &lt-&lt- «argv[» &lt-&lt- i &lt-&lt- «] содержит» &lt-&lt- argv[i] &lt-&lt- endl-
}

Откомпилируйте и запустите эту программу, используя командную строку, подобную следующей:

С:&gt- SHOWARGV А В С&lt-ENTER&gt-

argv[0] содержит SHOWARGV.EXE

argv[l] содержит А

argv[2] содержит В

argv[3] содержит С

Доступ к аргументам командной строки

Для увеличения количества задач, выполняемых программой, C++ позволяет вашей программе обращаться к аргументам командной строки, используя два параметра, которые C++ передает вmain. Первый параметрargc содержит количество аргументов командной строки (включая имя программы). Второй параметрargv представляет собой массив указателей на символьные строки. Каждая символьная строка соответствует аргументу командной строки. Чтобы обратиться к аргументам командной строки, измените заголовок функцииmain, как показано ниже:

void main(int argc, char *argv[])

ВЫПОЛНЕНИЕ ЦИКЛА, ПОКАargv -НЕ СОДЕРЖИТ NULL

Как вы уже знаете, программы C++ используют символ NULL для завершения символьной строки. Подобным способом C++ использует символ NULL, чтобы отметить последний элемент массиваargv. -Следующая программа ARGVNULL.CPP изменяет оператор for предыдущей программы, чтобы выполнять цикл по элементамargv, -пока текущий элементargv -не будет равен NULL:

#include &lt-iostream.h&gt-

void main(int argc, char *argv[])

{
— — -int i-
— — -for (i = 0- argv[i] != NULL- i++) —cout &lt-&lt- «argv[» &lt-&lt- i &lt-&lt- «] содержит» &lt-&lt- argv[i] &lt-&lt- endl-
}

ТРАКТОВКА —argv -КАК УКАЗАТЕЛЯ

Как
вы уже знаете, C++ позволяет вам обращаться к элементам массивов, используя указатели. Следующая программа ARGVPTR.CPP трактует
argv -как указатель на указатель символьной строки (другими словами, указатель на указатель), чтобы вывести содержимое командной строки:

#include &lt-iostream.h&gt-

void main(int argc, char **argv)

{
— — -int i = 0-
— — -while (*argv) —cout &lt-&lt- «argv[» &lt-&lt- i++ &lt-&lt- «] содержит» &lt-&lt- *argv++ &lt-&lt- endl-
}

Выберите время, чтобы проанализировать объявление параметраargvв main:

void main(int argc, char **argv)

Первая звездочка в объявлении сообщает компилятору C++, чтоargv -представляет собой указатель. Вторая звездочка сообщает компилятору, чтоargv —представляет собой указатель на указатель — в данном случае указатель на указатель типаchar. -Представьтеargv -как массив указателей. Каждый элемент массива в данном случае указывает на массив типаchar.


ИСПОЛЬЗОВАНИЕ АРГУМЕНТОВ КОМАНДНОЙ СТРОКИ

Следующая программа FILESHOW.CPP использует аргументы командной строки для вывода содержимого указанного пользователем файла на экран. Например, чтобы использовать программу FILESHOW для вывода содержимого файла AUTOEXEC.BAT из корневого каталога, ваша командная строка становится следующей:

C: &gt- FILESHOW AUTOEXEC.BAT &lt-Enter&gt-

Следующие операторы реализуют программу FILESHOW.CPP. Эта программа начинается с проверки параметраargc, -чтобы убедиться, что пользователь указал файл в командной строке. Если пользователь включает имя файла параметрargc -будет содержать значение 2. Далее программа открывает и выводит содержимое файла, используя методы, которые вы изучали в уроке 34. Как видите, если программа не может открыть указанный файл, она выводит сообщение об ошибке и завершается:

#include &lt-iostream.h&gt-

#include &lt-fstream.h&gt-

#include &lt-stdlib.h&gt-

void main(int argc, char *argv[])

{
— — -char line[256]-
— — -if (argc &lt- 2)

— — -{
— — — — — -cerr &lt-&lt- «Вы должны указать имя файла»&lt-&lt- endl-
— — — — — -exit(1)-
— — -}

— — -ifstream input_file(argv[1]) —
— — -if (input_file.fail()) cerr &lt-&lt- «Ошибка открытия BOOKINPO.DAT» &lt-&lt- endl-
— — -else

— — -{
— — — — — -while ((! input_file.eof()) &amp-&amp- (! input_file.fail()))

— — — — — -{
— — — — — — — — -input_file.getline(line, sizeof(line))-
— — — — — — — — -if (! input_file.fail()) cout &lt-&lt- line &lt-&lt- endl-
— — — — — -}
— — -}
}

ДОСТУП К ПЕРЕМЕННЫМ СРЕДЫ ОПЕРАЦИОННОЙ СИСТЕМЫ

Как вы знаете, большинство операционных систем позволяют вам определять переменные среды, к которым ваши программы могут обращаться для определения разных параметров, таких как командный путь. Например, если вы используете среду MS-DOS, вы устанавливаете или выводите переменные среды с помощью команды SET. В зависимости от типа вашего компилятора вы можете обращаться к переменным среды из вашей программы, используя третий параметрmain -с именемenv. -Подобно параметруargv,параметрenv -представляет собой указатель на массив указателей на символьные строки. Также, подобноargv, -C++ завершает этот массив символом NULL. Если ваш компилятор поддерживает параметрenv, -вы можете изменить заголовок функцииmain, —как показано ниже:

void main(int argc, char *argv[], char *env[])

Следующая программа SHOWENV.CPP выполняет цикл по элементам массиваenv длявывода переменных среды программы:

#include &lt-iostream.b&gt-

void main(int argc, char *argv[], char *env[])

{
— — -while (*env) —cout &lt-&lt- *env++ &lt-&lt- endl-
}

Как видите, программа просто выполняет цикл по элементам массиваenv, —пока не встретит указатель NULL, который указывает последнюю запись массива. Если вы откомпилируете и запустите эту программу, она выведет ваши переменные среды, как показано ниже:

С:&gt- SHOWENV &lt-ENTER&gt-

ТЕМР=С:WINDOWSTEMP

PROMPT=$p$g

COMSPEC=C:WINDOWSCOMMAND.СОМ

РАТН=С:WINDOWS-С:DOS

Доступ к переменным среды

В зависимости от типа компилятора, ваши программы могут обращаться к переменным среды операционной системы, используя третий параметр функцииmain с именем —< font face="Times New Roman, Times, serif">env. Подобно параметруargv, параметрenv представляет собой массив указателей на символьные строки, каждый из которых указывает переменную среды. Чтобы обратиться к переменным среды, используя параметрenv, измените заголовок функцииmain следующим образом:

void main(int argc, char *argv[], char *env[])

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Чтобы увеличить количество приложений, поддерживаемых вашей программой, C++ позволяет использовать аргументы командной строки. Из урока 37 вы узнаете, как с помощью макрокоманд и констант можно упростить вашепрограммирование или создать более удобочитаемый код. Однако, прежде чем перейти к уроку 37, убедитесь, что вы освоили следующие основные концепции:

  1. Когда вы запускаете программу из системной подсказки, информация которую вы вводите, становится командной строкой программы.
  2. Чтобы позволить вашим программам обращаться к командной строке C++ передает функцииmain -два параметра:argcargv.
  3. Параметрargc -содержит количество аргументов командной строки.
  4. Параметрargv -представляет собой массив указателей на символьные строки, каждая из которых содержит аргумент командной строки.
  5. В зависимости от вашего компилятора программа может обращаться к третьему параметруmain -с именемenv, -который представляет собой массив указателей на символьные строки, содержащие переменные среды.

Категория: Обучение C++ | Дата: 28.03.13

Меню раздела
Блок