Учебник по программированию на C для Linux, часть 22. Доступ к аргументам командной строки в программе на C
На этой странице
- Как получить доступ к аргументам командной строки в программе C
- Заключение
В предыдущем уроке мы обсудили несколько концепций, связанных с указателями в языке программирования C. Одной из обсуждаемых нами концепций был массив указателей. Мы использовали пример массива целочисленных указателей, чтобы продемонстрировать концепцию.
Как получить доступ к аргументам командной строки в программе C
Но, как упоминалось в этом руководстве, массив указателей может быть разных типов. Например, вот массив указателей на символы:
char *arr[] = {"HowtoForge", "FaqForge", "Linux"};
А вот небольшая программа, которая показывает, как можно использовать этот массив:
#include <stdio.h>
int main()
{
char *arr[] = {"HowtoForge", "FaqForge", "Linux"};
printf("\n %s", *arr);
printf("\n %s", *(arr+1));
printf("\n %s", *(arr+2));
return 0;
}
arr — адрес первого элемента этого массива. Теперь, поскольку это массив указателей, поэтому первый элемент (и все остальные элементы, доступ к которым осуществляется путем добавления 1 и 2 к arr) не что иное, как адрес. Таким образом, чтобы получить доступ к сохраненному адресу, мы используем оператор *.
Ниже приведен вывод этой программы:
HowtoForge
FaqForge
Linux
Вот как вы получаете доступ к значениям из массива указателей на символы. Теперь вы, должно быть, думаете, почему мы все это обсуждали?
Ну, мы сделали это, потому что это подводит нас к другой важной концепции, а именно к возможности доступа к аргументам командной строки в средах, поддерживающих язык программирования C. Давайте обсудим это подробно.
Как уже должно быть хорошо известно, main — это первая функция в вашей программе, которая вызывается при выполнении программы. Он вызывается с двумя аргументами: argc и argv. В то время как первый сообщает вам о количестве аргументов командной строки, последний на самом деле представляет собой массив указателей на сами аргументы.
Обратите внимание, что имя самой программы передается в качестве аргумента функции main. Из-за этого количество аргументов, представляемых argc, на один больше, чем фактическое количество аргументов, переданных программе. Ниже приведен пример:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("\n %d", argc);
printf("\n %s", *argv);
return 0;
}
Итак, мы выполнили эту программу, называемую a.out и находящуюся в домашнем каталоге нашей системы, без каких-либо аргументов. И вот вывод:
1
/home/a.out
Таким образом, вы можете видеть, что имя выполнения программы было передано в качестве аргумента. Если бы я использовал следующую команду:
/home/a.out htf ff
Тогда в этом случае argc был бы равен 3, а argv содержал бы адреса строк /home/a.out, htf и ff.
Вот лучший способ написать программу печати аргументов:
#include <stdio.h>
int main(int argc, char *argv[])
{
for(int i=0; i<argc; i++)
printf("\n %s", *(argv+i));
return 0;
}
Стоит помнить, что аргументы хранятся в массиве в том же порядке, в котором они передаются в командной строке.
Заключение
Скорее всего, вы столкнетесь с несколькими ситуациями, когда вам придется иметь дело с аргументами командной строки внутри кода C. То, что мы здесь обсуждали, должно стать для вас основой. Обязательно попробуйте несколько программ, чтобы получить лучшее представление о том, как осуществляется доступ к аргументам командной строки внутри программы на C.