Что касается "main (int argc, char * argv []) '
Возможные дубликаты:
Какие аргументы для main() для?
Что означает int argc, char * argv []?
Каждая программа начинается с определения main(int argc, char *argv[])
.
Я не понимаю, что это значит. Я был бы очень рад, если бы кто-нибудь мог объяснить, почему мы используем эти аргументы, если мы не используем их в программе? Почему не просто: int main()
?
Является ли имя программы одним из элементов *argv[]
и argc
является количество аргументов в *argv[]
? Каковы другие аргументы, отправленные в *argv[]
? Как мы можем отправить их?
Ответы
Ответ 1
Аргументы argc
и argv
of main
используются как способ отправки аргументов в программу, возможно, наиболее знакомым способом является использование терминала good ol, где пользователь может ввести cat file
. Здесь слово cat
- это программа, которая берет файл и выводит его на стандартный вывод (stdout
).
Программа получает количество аргументов в argc
и вектор аргументов в argv
, в приведенной выше теге arg ument c будет два ( Имя программы считается первым аргументом), а arg ument 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
, поскольку это подразумевалось. Сегодня это считается ошибкой.
В 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()
завершится с ошибкой.
Ответ 2
Это для передачи аргументов вашей программе, например из командной строки, когда вызывается программа
$ 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
[Строки char
"2", "8" и т.д. могут быть преобразованы в число с использованием функции символьного преобразования номера, например. atol()
(ссылка)]
Ответ 3
С argc
(количество аргументов) и argv
(вектор-аргумент) вы можете получить число и значения переданных аргументов при запуске приложения.
Таким образом, вы можете использовать параметры (например, -version
), когда ваше приложение начинает действовать по-другому.
Но вы также можете использовать int main(void)
как прототип в C.
Существует третий (менее известный и нестандартный) прототип с третьим аргументом, который равен envp
. Он содержит переменные среды.
Ресурсы
Ответ 4
argc
означает количество аргументов, передаваемых программе. char* argv[]
- переданные аргументы. argv[0]
- это всегда имя самой программы. Я не уверен на 100%, но я думаю, что int main()
действителен в C/С++.
Ответ 5
comp.lang.c FAQ посвящен вопросу
"What the correct declaration of main()?"
в Вопрос 11.12a.
Ответ 6
argc
- количество аргументов командной строки, а argv
- массив строк, представляющих аргументы командной строки.
Это дает вам возможность реагировать на аргументы, переданные программе. Если вы ничего не ожидаете, вы можете использовать int main
.
Ответ 7
argc
- количество аргументов командной строки, заданных программе во время выполнения, а argv
- массив массивов символов (а скорее массив C-строк), содержащий эти аргументы. Если вы знаете, что вам не понадобятся аргументы командной строки, вы можете объявить свой основной при принятии аргумента void
, вместо этого:
int main(void) {
/* ... */
}
Это только два прототипа, определенные для main
в соответствии со стандартами, но некоторые компиляторы также допускают тип возврата void
. Подробнее об этом в Википедии.
Ответ 8
Вы можете запустить приложение с такими параметрами, как app -something -somethingelse
. int argc
представляет число этих параметров, а char *argv[]
- массив с фактическими параметрами, передаваемыми в ваше приложение. Таким образом, вы можете работать с ними внутри своего приложения.