int main (int argc, char ** argv)
Дубликат:
Что такое правильное объявление основного?
Что мы подразумеваем под аргументами в этой main
функции? Что они пытаются нам сказать?
int main(int argc, char** argv)
ОБНОВЛЕНИЕ: И предыдущая строка кода похожа на эту int main(int argc, char* argv[])
? Если так, как мы можем сказать, что char** argv
похож на char* argv[]
как они не похожи с точки зрения массива?
Как это по сравнению с int main()
который не имеет аргументов?
Благодарю.
Ответы
Ответ 1
Параметр argc
- это количество заданных параметров командной строки, включая имя исполняемого файла, при вызове исполняемого файла. Параметры отдельной командной строки находятся в массиве argv
, который NULL
завершен (имя и путь, используемые для вызова исполняемого файла, находятся в argv[0]
).
Разница между двумя версиями - это просто, если вы хотите анализировать аргументы командной строки или нет - если вас это не интересует, вы можете игнорировать их, используя вторую форму.
Ответ 2
Wikipedia дает хорошее объяснение. Первый параметр дает вам количество аргументов командной строки, а второй дает фактические аргументы.
Ответ 3
Они представляют параметры командной строки.
argc - это количество параметров командной строки, включая имя исполняемого файла.
argv - массив строк с нулевым завершением, где argv[0]
- параметр командной строки, а argv[i]
- i-й параметр после этого, argv[argc-1]
является последним, а argv[argc]
на самом деле хорошо определен и указатель NULL.
Таким образом:
foo bar baz
в командной строке будет argc
= 3, argv[0]
= "foo" argv[1]
= "bar" argv[2]
= "baz" argv[3]
= NULL
Обратите внимание, что для аргументов "flag" нет специального вложения.
grep -i foo bar.cpp bar.h
будет иметь 4 аргумента (argc = 5, включая сам grep), -i, являющийся одним из них, и это применимо, даже если следующий параметр был "значением", прикрепленным к флагом.
Заметьте, если вы создали подстановочный знак
grep -i foo *
в UNIX, по крайней мере, * будет расширен до вызова в grep, и таким образом каждый сопоставленный файл будет аргументом.
Кстати
char** argv
и char* argv[]
сделать то же самое.
Кроме того, в то время как в стандарте говорится, что вы должны использовать одну из этих подписей (вы даже не должны добавлять в какие-либо константы), нет закона, который вы должны использовать с этими двумя именами переменных, но теперь это так условно, что они в значительной степени универсальный. (т.е. вы можете использовать argCount
и argValues
, если хотите).
Ответ 4
argc дает вам количество аргументов, и argv дает вам эти аргументы. Первый - это путь к .exe, используемый для запуска вашей программы, следующие аргументы - вызывающий ваш .exe, предоставленный в командной строке следующим образом:
my.exe arg1 arg2
В то время как
int main() {}
просто игнорирует аргументы.
Ответ 5
argv - это массив, содержащий параметры командной строки, переданные приложению. argc сообщает вам количество элементов, содержащихся в этом массиве.