25. Предаване на параметри към функцията main().
Всяка C програма започва с извикване на функцията main(). Тази функция трябва да присъства във всяка програма.
Както всяка друга функция, функцията main() може да има параметри. Понякога при стартиране на програма е полезно да й се предаде някаква информация. Тази информация се предава на функцията main() чрез аргументи на командния ред.Аргументите на командния редса информация, която се въвежда в командния ред след името на програмата, когато програмата се изпълнява извън средата за разработка на програма. Например, за да започнете архивирането на файла task.cpp, трябва да въведете следното в командния ред:
winrara archTasktask.cpp //winrar.exea archTasktask.cpp
където winrar е името на програмата за архивиране, а низовете "a", "archTask" и "task.cpp"са аргументи на командния ред, които казват на програмата да създаде архив ("a") с иметоarchTaskот един файлtask.cpp.
Когато предавате параметри към функцията main(), тя трябва да бъде дефинирана по следния начин:
int main(int argc, char *argv[]) < >// или void main(. )<>
Параметърът argc съдържа броя на аргументите в командния ред и е цяло число и винаги е поне 1, тъй като първият аргумент винаги е името на програмата (името на програмата с пълния път до програмата).
Параметърът argv е указател към масив от низови указатели. В този масив всеки елемент сочи към следващия аргумент на командния ред. Празните квадратни скоби показват, че масивът е с неопределена дължина. Индивидуалните аргументи могат да бъдат достъпни чрез индексиране на масива argv. Например argv[0] сочи към първия символен низ, който винаги е името на програмата; argv [1]сочи към първия аргумент и т.н. Списъкът с аргументи е ограничен до NULL, т.е. argv[argc] == NULL.
За достъп до един знак в един от аргументите на командния ред, използвайте втория индекс в argv. Това означава, че първият индекс на argv осигурява достъп до низа, а вторият индекс осигурява достъп до неговите отделни знаци.
Всички аргументи на командния ред са низове, така че преобразуването на числови параметри в желания формат трябва да бъде осигурено в програмата по време на нейното разработване.
Пример за програма с различни начини за преобразуване на числа в символен формат в цели и реални числа:
// при стартиране задаваме например следните аргументи: 100 2.7
void main(int a, char *b[])
Имената argc и argv са традиционни, но не са задължителни. Тези два параметъра във функцията main() могат да бъдат наречени както пожелаете.
Прост пример за използване на аргументи на командния ред:
int main(int argc, char *argv[])
printf("Невалидни параметри за стартиране на програмата!\n");
k = atoi(argv[3]); // преобразуване на числов параметър
printf("Здравей, %s от %s клас %d",
Ако името на програмата е задача и вашето име е "Вася", групата е "PM-11" от първата година, тогава за да стартирате програмата, въведете в командния ред:
задача Вася PM-11 1
В резултат на изпълнението на програмата на екрана ще се появи следното съобщение: "Здравей, Вася от групата PM-11 от 1-ва година."
Имайте предвид, че ако не са дадени всички аргументи на командния ред, ще се покаже съобщение за грешка. Програмите с аргументи на командния ред често правят следното: когато потребителят стартира тези програми, без да въведе необходимата информация, се показват инструкции как правилно да се уточнят аргументите.
Аргументи на командния редтрябва да бъдат разделени един от друг с интервал. Ако има интервали в самия аргумент, тогава, за да предотвратите множество аргументи от него, този аргумент трябва да бъде ограден в двойни кавички. В резултат на това целият цитиран низ ще се третира като един аргумент. Например, програмата може да се изпълнява по следния начин: задача „Вася и Петя” PM-21 2. В резултат на изпълнението на програмата на екрана ще се появи следното съобщение: „Здравейте, Вася и Петя от група PM-21 от 2-ра година”.
Какво е char *argv[]? Това емасив, чиито елементи сауказатели, т.е.масив от указатели. Така че, когато предавате параметри на main(), това може да се дефинира по следния начин:
void main(int argc, char **argv)
Задача.Показва всички аргументи на командния ред (няма нужда да показва името на програмата).
void main(int argc, char *argv[])
void main(int argc, char **argv)
Обикновено аргументите на командния ред се използват за предаване на първоначални данни към програма, които ще са й необходими при стартиране (например аргументите на командния ред често предават данни като име на файл или опции за стартиране на програмата).
Когато програмата не изисква параметри на командния ред, ключовата дума void се използва в списъка с параметри на функцията main() (или просто се оставя празна).
Как да отстранявате грешки вBCпрограми, които изискват аргументи от командния ред.В менюто Run→Arguments. трябва да се въведат аргументи на командния ред. Името на програмата не е задължително. След това можете просто да стартирате и да отстраните грешки в програмата в средата за разработка, както обикновено.