69730

Параметри функції main( )

Домашняя работа

Информатика, кибернетика и программирование

Параметр argv - масив покажчиків на рядки; argc - параметр типа int, значення якого визначає розмір масиву argv, тобто кількість його елементів, envp - параметр-масив покажчиків на, символьні рядки, кожна з яких містить опис однієї із змінних середовища (оточення).

Украинкский

2014-10-09

32 KB

0 чел.

Самостійне вивчення

Тема 7: Параметри функції main( )

Відповідно до синтаксису мови Сі основна функція кожної програми може мати такий заголовок:

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

Параметр argv - масив покажчиків на рядки; argc - параметр типа int, значення якого визначає розмір масиву argv, тобто кількість його елементів, envp - параметр-масив покажчиків на, символьні рядки, кожна з яких містить опис однієї із змінних середовища (оточення). Під середовищем розуміється та програма (звичайно це операційна система), яка "запустила" на виконання функцію main().

Призначення параметрів функції main() — забезпечити зв'язок виконуваної програми з операційною системою, точніше, з командним рядком, з якого запускається програма і в яку можна вносити дані і тим самим передавати виконуваній програмі будь-яку інформацію.

Якщо усередині функції main() немає необхідності звертатися до інформації з командного рядка, то параметри звичайно опускаються.

Якщо програміст "запускає" програму на мові Сі з інтегрованого середовища розробк (наприклад, Turbo C), то він рідко використовує командний рядок і повинен вживати спеціальні заходам, щоб побачити цей рядок або внести в нього потрібну інформацію. (В Turbo С потрібно в головному меню вибрати пункт RUN, а потім в спадаючому меню вибрати пункт ARGUMENTS...).

При запуску програми з операційної системи командний рядок явно доступний, і саме в ньому записується ім'я виконуваної програми. Вслід за ім'ям можна розмістити потрібну кількість "слів", розділяючи їх один від одного пробілами. Кожне "слово" з командного рядка стає рядком-значенням, на який вказує черговий елемент параметра argv[i], де 0<i<argc. Тут потрібно зробити одне уточнення.

Як і в кожному масиві, в масиві argv[ ] індексація элементів починається з нуля, тобто завжди є елемент argv[0]. Цей елемент є покажчиком на повну назву запускаємої програми. Наприклад, якщо з командного рядка виконується звернення до програми EXAMPLE  з каталога CATALOG, розміщеного на диску С, то виклик в MS-DOS виглядає так:

С:\CATALOG\EXAMPLE.ЕХЕ

Значення argc в цьому випадку буде рівне 1, а рядок, який адресує покажчик argv[0], буде таким:

"С:\CATALOG\EXAMPLE.ЕХЕ"

Як ілюстрація сказаного приведемо програму, яка виводить на екран дисплея всю інформацію з командного рядка, розміщуючи кожне "слово" на новому рядку екрану.

#include  <stdio.h>

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

{

int   і ;

for   (i=0;   i<argc;   i++)

printf("\n  argv   [%d]   ->  %s", i, argv[i] ;

}

Нехай програма запускається з такого командного рядка:

С:\WP\test66   11  22   33

Результат виконання програми:

argv  [0]   -> С:\WP\test66.exe

argv  [1]   -> 11

argv  [2]   -> 22

argv  [3]   -> 33

В головній програмі main( ) дозволено використовувати і третій параметр char * envp[ ]. Його призначення - передати в программу всю інформацію про оточення, в якому виконується програма. Наступний приклад ілюструє можливості цього третього параметра основної функції main( ).

#include  <stdio.h>

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

{

int n;

printf("\nПрограмма '%s' "

         "\nЧисло параметрів при запуску: %d", argv[0], argc-l);

for (n=l; n<argc; n++)

printf("\n%d-й параметр: %s", n, argv[n]);

printf("\n\nСписок змінних оточення:");

for (n=0; envpt[n]; n++)

printf("\n%s", envp[n]);

}

Нехай програма "запущена" на виконання в MS-DOS під Windows 95 з такого командного рядка:

С:\WWP\TESTPROG\MAINENVP.EXE   qqq www

Результати виконання програми:

Програма   ' С: \WWP\TESTPROG\MAINENVP. ЕХЕ '

Число  параметрів  при  запуску:   2

1-й  параметр:   qqq

2-й параметр: www

Список змінних оточення:

ТМР=С: \WINDOWS\TEMP

PROMPT=$p$g

winbootdir=C: \WINDOWS

COMSPEC=C:\WINDOWS\COMMAND.COM

TEMP=c:\windows\temp

CLASSPATH=.;c:\cafe\java\lib\classes.zip

HOMEDRIVE=c:

HOMEPATH=\cafe\java

JAVA_HOME=c:\cafe\Java

windir=C: \WINDOWS

NWLANGUAGE=English

PATH=C:\CAFE\BIN; C:\CAFE\JAVA\BIN; C:\BC5\BIN;

C:\WINDOWS; C:\WINDOWS\COMMAND; C:\NC;

C:\ARC;С:\DOS;C:\VLM;C:\TC\BIN

CMDLINE=tC

Через масив покажчиків envp[] програмі доступний набір символьних рядків, створюючих оточення програми. Частіше за все кожний рядок містить таку інформацію:

ім'я_змінної = значення_змінної

Наприклад, в приведених результатах ім'я змінної ТМР пов'язано з ім'ям каталога для тимчасових даних. Змінивши значення змінної ТМР, можна "примусити" програму використовувати для зберігання тимчасових даних інший каталог. Для роботи з рядками оточення в програмах на мові Сі використовують функції getenv() і putenv().


 

А также другие работы, которые могут Вас заинтересовать

82099. Проектирование и расчеты электрических сетей освещения цехов промышленных предприятий 4.22 MB
  Целью данного пособия является оказание методической помощи при изучении курса МДК 01.03 «Электрическое и электромеханическое оборудование» студентами выпускных курсов колледжа по специальности 140448 Техническая эксплуатация и обслуживание электрического и электромеханического оборудования.
82100. СТАНОВЛЕНИЕ ЛОКАЛЬНЫХ РЕЖИМОВ РОСТА И РАЗВИТИЯ В ГОРОДАХ МОСКОВСКОЙ ОБЛАСТИ: ВОЗМОЖНОСТИ И ОГРАНИЧЕНИЯ 414 KB
  Вышеперечисленные исследования власти в городах России в теоретическом плане базируются как на западном, так и на отечественном опыте изучения локальной политики. Однако несмотря на относительную популярность данного направления в последнее время малые и средние города в рамках данного направления...
82101. Анализ содержательной модели американского инфлайт-издания «AmericanWay» 1.82 MB
  Авиажурнал (или инфлайт-журнал) будучи одним из представителей корпоративных СМИ, стал участником медиа соревнований. Мы предлагаем остановить свое внимание на журналах данного вида бортовой прессы и исследовать их содержательную модель.
82102. Зиянды шығыстың таралуын есептеу 130.8 KB
  Құрылыс материалдардың даму тендециясының бірі өндірістің бірден өсуі,өнімдердің сапасын жоғарлату, жаңа өнімдерді шығаруды ұйымдастыру, цементтің-кірпіштің тиімді түрлерін шығару, қазіргі заманның қуатты қондырғыларын пайдалану болып табылады.
82103. Алгоритм ориентирования сверхлегкого БПЛА по данным бортового фото-видео регистратора 1.45 MB
  В современном мире для решения задач мониторинга местности все чаще стали применятся беспилотные летательные аппараты БПЛА которые могут выполнять поставленную им задачу например полет по маршруту по заданным точкам в автоматическом режиме.
82104. СОБЫТИЙНЫЙ МЕНЕДЖМЕНТ В РАЗВИТИИ ТУРИСТИЧЕСКОЙ ИНДУСТРИИ РЕГИОНА (НА ПРИМЕРЕ ВОЛОГОДСКОЙ ОБЛАСТИ) 594 KB
  Важно также учитывать влияние глобальных процессов, таких как социальная мобильность, медиатизация и урбанизация, на преобразования, происходящие в регионах. Эти процессы интересны тем, что они приводят к интенсификации взаимосвязей между центральными и региональными системами.
82105. Электрогидравлический привод подачи фрезерного станка 1.61 MB
  Отсчет перемещения стола 10 относительно станины 9 осуществляется линейным индуктосином 11, который является индуктивным датчиком перемещения. Измерение осуществляется за счет сдвига вектора магнитной индукции при перемещении движка индуктосина относительно основной шкалы...
82106. Система автоматического регулирования температуры жидкости в системе охлаждения двигателя 858.5 KB
  Построение желаемой ЛАЧХ системы и оценка качества САР. Коррекция САР и расчет параметров корректирующего устройства Расчет переходной характеристики скорректированной САР Заключение. Для получения характеристического уравнения найдем главную передаточную функцию замкнутой САР.
82107. Электрогидравлический следящий привод с объемным регулированием 1.16 MB
  В систему также может подключаться с помощью выключателя 17 датчик угловой скорости 15 вала гидромотора. Сигнал от датчика обратной связи поступает на усилитель-сумматор, который определяет ошибку регулирования (где - управляющее напряжение) и усиливает сигнал ошибки.