8.6  Передача параметров функции main()

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

· первый параметр служит для передачи числа передаваемых строк;

· второй для передачи самих строк.

Общепринятые (но не обязательные) имена этих параметров argc и argv. Параметр argc имеет тип int, его значение формируется из анализа командной строки и равно количеству слов в командной строке, включая и имя вызываемой программы (под словом понимается любой текст не содержащий символа «пробел»). Параметр argv – это массив указателей на строки, каждая из которых содержит одно слово из командной строки. Если слово должно содержать символ пробел, то при записи его в командную строку оно должно быть заключено в кавычки.

Функция main() может иметь и третий параметр, называемый argp, который служит для передачи в функцию main() параметров операционной системы (среды) в которой выполняется С/С++ программа. Таким образом, заголовок функции main имеет вид:

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

Операционная система поддерживает передачу значений для параметров argc, argv, argp, а на пользователе лежит ответственность за передачу и использование фактических аргументов функции main(). Приведем пример программы печати фактических аргументов, передаваемых в функцию main() из операционной системы и параметров операционной системы.

Пример 3

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

#include<stdio.h>

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

int i=0;

printf ("n Имя программы %s", argv[0]);

for    (i=1; i<=argc; i++) printf ("n аргумент %d равен %s", i,argv[ i ]);

printf ("n   Параметры операционной системы:");

while  (*argp)

printf ("n %s",*argp); argp++;

}

return (0);

 }

Доступ к параметрам операционной системы можно также получить при помощи библиотечной функции geteuv(), ее прототип имеет следующий вид:

char *geteuv (const char *varname);

Аргумент этой функции задает имя параметра среды, указатель на значение которой выдаст функция geteuv(). Если указанный параметр не определен в среде в данный момент, то возвращается значение NULL. Используя указатель, полученный функцией geteuv(), можно только прочитать значение параметра операционной системы, но нельзя его изменить. Для изменения значения параметра системы предназначена функция puteuv().

Указатели также используются для организации ввода-вывода высокого уровня. Чтобы можно было считывать из некоторого файла или записывать в него, прежде этот файл необходимо открыть с помощью функции fopen() из стандартной библиотеки.

Функция fopen()  берет внешнее имя, выполняет определенные действия под управлением операционной системы  и возвращает внутреннее имя, которое должно использоваться при последующих чтениях из файла или записях в него. Это внутреннее имя, называемое "указателем файла", фактически является указателем структуры, которая содержит информацию о файле (место размещения буфера, текущая позиция символа в буфере, происходит ли чтение из файла или запись в него и т.д.). В файле stdio.h содержится определение структуры с именем FILE.