Для чего нужны аргументы main ()? - PullRequest
18 голосов
/ 17 сентября 2010

Каждый раз, когда я создаю проект (стандартная утилита командной строки) с Xcode, мой главная функция начинается примерно так:

int main(int argc, const char * argv[])

Что все это в скобках? Зачем использовать это, а не просто int main()

Ответы [ 5 ]

43 голосов
/ 17 сентября 2010

main получает количество аргументов и аргументы, переданные ему при запуске программы, чтобы вы могли получить к ней доступ.

argc содержит количество аргументов, argv содержит указатели на аргументы.argv [argc] всегда является нулевым указателем.Аргументы обычно включают само имя программы.

Как правило, если вы запускаете вашу программу как ./myprogram

  • argc равен 1;
  • argv [0] - это строка "./myprogram"
  • argv [1] - это нулевой указатель

Если вы запускаете свою программу как ./myprogram /tmp/somefile

  • argc = 2;
  • argv [0] - это строка "./myprogram"
  • argv [1] - это строка "/ tmp / somefile"
  • argv [2] - это NULLуказатель
4 голосов
/ 17 сентября 2010

Хотя в Windows и большинстве разновидностей Unix и Linux это не предусмотрено стандартами, main может иметь до трех аргументов:

int main(int argc, char *argv[], char *envp[])

Последний похож на argv (который представляет собой массив строк, как описано в других ответах, с указанием аргументов для программы, передаваемой в командной строке.)

Но он содержит переменные среды, например, PATH или что-либо еще, что вы установили в своей оболочке ОС. Он завершается нулем, поэтому нет необходимости указывать аргумент count.

1 голос
/ 31 августа 2016

main () - это функция, которая может принимать максимум три параметра или не иметь параметров.Ниже приведены параметры, которые main () может принимать: -

1) int argc: содержит количество аргументов, переданных (из командной строки) во время выполнения программы, или вы можете сказать этоиспользуется для отслеживания количества переменных, переданных во время выполнения программы.Он не может содержать отрицательное значение.Например.Если вы передадите свой исполняемый файл «./a.out», он будет считаться параметром, и, следовательно, значение argc будет равно 0, т.е. передается 1 значение.

2) char * argv []: этомассив символьных указателей, который содержит адрес строк (массив символов), которые передаются из командной строки во время выполнения программы.Например.В приведенном выше примере, если вы написали argv [argc] т.е. argv [0] в cout, тогда он выдаст ./a.out в качестве вывода.

3) char * envp []: это также массив символовуказатель, который используется для хранения адреса переменных среды, используемых в программе.Переменные среды - это набор динамических именованных значений, которые могут влиять на поведение выполняющегося процесса на компьютере.Например, запущенный процесс хочет сохранить временные файлы, затем он вызовет переменные среды TEMP, чтобы получить подходящее местоположение.

1 голос
/ 17 сентября 2010

Они используются для передачи параметров командной строки.

Например: если вы хотите передать имя файла вашему процессу извне, то

myExe.exe "filename.txt"

, командная строка «filename.txt» будет сохранена в argv [],номер параметра командной строки (количество) будет сохранен в argc.

1 голос
/ 17 сентября 2010

Это для использования аргументов из командной строки -

argc содержит количество аргументов на командная строка (включая имя программы), а argv - это список фактические аргументы (представленные в виде символьных строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...