Лабораторне заняття 4. Робота з командним рядком

Мета роботи: освоїти роботу з аргументами командного рядка в мові С.

Теоретичні відомості

В усіх програмах, що створювались раніше, головна функція main не приймала на вхід жодних аргументів (замість них записувалось значення void).

Це означає, що жодні інші слова не можуть бути надрукованими після назви програми, щоб бути доступними в межах функції main, а єдиний шлях для забезпечення можливості вводу даних – це виклик функції після старту програми, наприклад get_string.

Такі команди як cd отримують параметри з командного рядка, отже команда cd Folder змінює каталог на Folder без використання окремого рядка для вводу даних; mkdir pset2 створює новий каталог під назвою pset2, а make hello компілює програму під назвою hello.

Розглянемо програмний код, який оголошує функцію main, що може приймати параметри командного рядка:

int main(int argc, string argv[])

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

Якщо запустити на виконання програму з параметром ./hello, комп’ютер зберігатиме це у argc та argv[0] (рис. 4.1). Назва програми також являється параметром, тому навіть якщо параметри не вводились явно в командному рядку, мінімальна їх кількість рівна одиниці.


Рисунок 4.1 – Зберігання аргументів програми hello в пам’яті

У випадку, коли виконується команда cd Folder пам’ять буде мати наступний вигляд (рис. 4.2):


Рисунок 4.2 – Зберігання аргументів команди cd в пам’яті

Розглянемо приклад програми Hello, яка використовує параметри командного рядка без вживання функції get_string (рис. 4.3):

     

Рисунок 4.3 – Код програми Hello та результат її виконання

Визначення функції main як такої, що повертає цілочисельне значення (тип int) говорить про те, що в коді програми це має бути реалізовано явно або неявно. У другому випадку – програма просто повинна коректно завершувати свою роботу.

В програмі Hello використовується явне повернення значення функції для перевірки кількості введених аргументів. Для коректної роботи програми необхідна кількість аргументів – два, а отже потрібно це перевірити (рис. 4.3, рядок 6), тоді програма буде виконуватись далі (рис. 4.3, рядок 8-9). В іншому випадку – завершуємо програму передчасно (рис. 4.3, рядок 13).

Оскільки аргументи командного рядка приймаються у вигляді тексту, часто виникає необхідність перетворити текст в ціле або дійсне число. Тут в нагоді стає бібліотека stdlib.h, яка містить набір функцій, для перетворення різних типів даних: atoi (з типу string в тип int), atol (з типу string в тип long), atoll (з типу string в тип long long), atof (з типу string в тип double):

int a = atoi(text); // text – змінна типу string

long b = atol(text); // text – змінна типу string

long long c = atoll(text); // text – змінна типу string

double d = atof(text); // text – змінна типу string


Остання зміна: Thursday 28 May 2020 14:08 PM