Что касается 'main(int argc, char *argv [])' [дубликат]
Возможные Дубликаты:
для чего нужны аргументы в main ()?
что означает int argc, char *argv []?
каждая программа начинается с main(int argc, char *argv[])
определение.
Я не понимаю, что это означает. Я был бы очень рад, если бы кто-нибудь мог объяснить, почему мы используем эти аргументы, если мы не используем их в программе? Почему бы просто не:int main()
?
является ли название программы одним из элементов *argv[]
и argc
- это количество аргументов в *argv[]
? Какие еще аргументы отправляются в *argv[]
? Как мы их отправим?
8 ответов:
доводы
argc
иargv
наmain
используется как способ отправки аргументов в программу, возможно, наиболее знакомым способом является использование хорошего терминала ol, где пользователь может ввестиcat file
. Вот это словоcat
- это программа, которая берет файл и выводит его на стандартный вывод (stdout
).программа получает количество аргументов в
argc
и вектор аргументов вargv
, в выше argument count будет два (имя программы считается первым аргументом) и argт. vЭктор будет содержать [cat
,file
, null]. В то время как последний элемент является нулевым указателем.обычно вы пишете это так:
int // Specifies that type of variable the function returns. // main() must return an integer main ( int argc, char **argv ) { // code return 0; // Indicates that everything went well. }
если ваша программа не требует каких-либо аргументов, она также может написать
main
функции следующим образом:int main() { // code return 0; // Zero indicates success, while any // Non-Zero value indicates a failure/error }
в ранние версии языка C, не было
int
доmain
как это подразумевалось. Сегодня, это считается ошибкой.On POSIX-совместимые системы (и Windows), существует возможность использовать третий параметр
char **envp
, который содержит вектор из программы envпеременные айронменом. Дальнейшие вариации списка аргументовmain
функция существует, но я не буду подробно описывать ее здесь, так как она есть нестандартный.кроме того, именование переменных-это и не имеет никакого фактического значения. Это всегда хорошая идея, чтобы придерживаться этого, так что вы не путаете других, но это было бы одинаково справедливо, чтобы определить
main
какint main(int c, char **v, char **e) { // code return 0; }
и для вашего второго вопроса существует несколько способов отправки аргументов в программу. Я бы рекомендовал вам посмотреть на
exec*()
семейство функций что это POSIX-стандартный, но это, наверное легче использоватьsystem
("command arg1 arg2")
, но использованиеsystem()
обычно хмурится, поскольку это не гарантирует работу на каждой системе. Я не испытывал его сам; но если нетbash
,zsh
, или другой оболочки, установленной на *NIX-системы,system()
не удастся.
тех, которые предназначены для передачи аргументов в вашу программу, например, из командной строки, когда программа вызывается
$ gcc mysort.c -o mysort $ mysort 2 8 9 1 4 5
выше, программа
mysort
выполнена с некоторыми параметрами командной строки. Внутриmain( int argc, char * argv[])
, в результатеArgument Count, argc = 7
так как есть 7 аргументов (считая программы), и
Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" };
ниже приведен полный пример.
$ cat mysort.c #include <stdio.h> int main( int argc, char * argv [] ) { printf( "argc = %d\n", argc ); for( int i = 0; i < argc; ++i ) { printf( "argv[ %d ] = %s\n", i, argv[ i ] ); } } $ gcc mysort.c -o mysort $ ./mysort 2 8 9 1 4 5 argc = 7 argv[ 0 ] = ./mysort argv[ 1 ] = 2 argv[ 2 ] = 8 argv[ 3 ] = 9 argv[ 4 ] = 1 argv[ 5 ] = 4 argv[ 6 ] = 5
[The
char
строки "2", "8" и т. д. может быть преобразован в число с помощью некоторые функции преобразования символов в числа, напримерatol()
(ссылка)]
С
argc
(количество аргументов) иargv
(вектор аргументов) вы можете получить число и значения переданных аргументов, когда ваше приложение было запущено.таким образом, вы можете использовать параметры (например,
-version
) когда ваше приложение начинает действовать по-другому.но вы также можете использовать
int main(void)
как прототип в C.существует третий (менее известный и нестандартный) прототип с третьим аргументом, который
envp
. Он содержит переменная окружения.
ресурсы:
argc
означает количество аргументов, которые передаются в программу.char* argv[]
- переданные аргументы.argv[0]
всегда само имя программы. Я не уверен на 100%, но я думаюint main()
действителен в C / C++.
на комп.ленг.с чаво вопрос
"What's the correct declaration of main()?"на вопрос 11.12 a.
argc
количество аргументов командной строки иargv
- это массив строк, представляющих аргументы командной строки.Это дает вам возможность реагировать на аргументы, переданные в программу. Если вы не ожидаете ничего, вы можете также использовать
int main
.