Поиск по сайту:

Учебник по программированию на C для Linux, часть 22. Доступ к аргументам командной строки в программе на C


На этой странице

  1. Как получить доступ к аргументам командной строки в программе C
  2. Заключение

В предыдущем уроке мы обсудили несколько концепций, связанных с указателями в языке программирования 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.