Что касается "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/С++.

Ответ 6

argc - количество аргументов командной строки, а argv - массив строк, представляющих аргументы командной строки.

Это дает вам возможность реагировать на аргументы, переданные программе. Если вы ничего не ожидаете, вы можете использовать int main.

Ответ 7

argc - количество аргументов командной строки, заданных программе во время выполнения, а argv - массив массивов символов (а скорее массив C-строк), содержащий эти аргументы. Если вы знаете, что вам не понадобятся аргументы командной строки, вы можете объявить свой основной при принятии аргумента void, вместо этого:

int main(void) {
    /* ... */ 
}

Это только два прототипа, определенные для main в соответствии со стандартами, но некоторые компиляторы также допускают тип возврата void. Подробнее об этом в Википедии.

Ответ 8

Вы можете запустить приложение с такими параметрами, как app -something -somethingelse. int argc представляет число этих параметров, а char *argv[] - массив с фактическими параметрами, передаваемыми в ваше приложение. Таким образом, вы можете работать с ними внутри своего приложения.