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