Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Как работают argc и argv

#cpp #c


Расскажите, пожалуйста, о принципе работы аргументов argc и argv в C/C++.
    


Ответы

Ответ 1



Первая типа int хранит количество передаваемых параметров, один из параметров - это обязательно имя программы (абсолютный путь), далее уже могут быть ваши параметры, если это ваша программа. argv - это обычно массив char, но сейчас уже _TCHAR, причем указателей, но _TCHAR обычно в IDE стоит как char, там уже имена переданных параметров, один - это программа, а остальные - это уже их порядок. Пример: hello.exe -param1 -param2 argc = 3 argv[0] = hello.exe argv[1] = -param1 argv[2] = -param2 Вот я только с путем подзабыл. Если что, книга есть "Пахомов Visual C\C++ 2010", я там такое вычитывал.

Ответ 2



argv - это массив указателей на нуль-терминированные строки, содержащие параметры командной строки, с которыми вызывалась ваша программа. Если argc больше нуля, то argv[0] содержит указатель на имя вашей программы. В каком виде это имя представлено - зависит от реализации. Если имя программы не предоставляется, argv[0] будет указывать на пустую строку (т.е. не может быть нулевым указателем). Если argc больше единицы, то элементы argv[1]...argv[argc - 1] содержат указатели на параметры командной строки. Размер этого массива - argc + 1 (а не argc, как часто ошибочно полагают). При этом гарантируется, что argv[argc] содержит нулевой указатель. Таким образом для того, чтобы найти конец массива argv, вы можете как пользоваться значением argc, так и просто просматривать массив argv до встречи с первым нулевым указателем. В языке С разрешается модифицировать как элементы массива argv, так и сами строки, указуемые элементами массива argv (разумеется, в пределах исходной длины строки). В языке С++ такого разрешения явным образом не дается.

Ответ 3



argc - 1 равно количеству аргументов, переданных программе в командной строке. argv[1] ... argv[argc - 1] - сами аргументы. argv[0] - имя программы, как ввели его в командной строке.

Комментариев нет:

Отправить комментарий