Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание программ на С++.doc
Скачиваний:
15
Добавлен:
29.09.2019
Размер:
1.59 Mб
Скачать

Трактовка argv как указателя

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

#include <iostream.h>

void main(int argc, char **argv)

{     int i = 0;     while (*argv) cout << "argv[" << i++ << "] содержит " << *argv++ << endl;  }

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

void main(int argc, char **argv)

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

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

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

C: \> FILESHOW \AUTOEXEC.BAT <Enter>

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

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>

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

{     char line[256];     if (argc < 2)

   {        cerr << "Вы должны указать имя файла" << endl;        exit(1);     }

   ifstream input_file(argv[1]) ;     if (input_file.fail()) cerr << "Ошибка открытия BOOKINPO.DAT" << endl;     else

   {        while ((! input_file.eof()) && (! input_file.fail()))

      {           input_file.getline(line, sizeof(line));           if (! input_file.fail()) cout << line << 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 <iostream.b>

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

{     while (*env) cout << *env++ << endl;  }

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

С:\> SHOWENV <ENTER>

ТЕМР=С:\WINDOWS\TEMP

PROMPT=$p$g

COMSPEC=C:\WINDOWS\COMMAND.СОМ

РАТН=С:\WINDOWS;С:\DOS

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

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

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