Что касается 'main(int argc, char *argv [])' [дубликат]


Возможные Дубликаты:
для чего нужны аргументы в main ()?
что означает int argc, char *argv []?

каждая программа начинается с main(int argc, char *argv[]) определение.

Я не понимаю, что это означает. Я был бы очень рад, если бы кто-нибудь мог объяснить, почему мы используем эти аргументы, если мы не используем их в программе? Почему бы просто не:int main()?

является ли название программы одним из элементов *argv[] и argc - это количество аргументов в *argv[]? Какие еще аргументы отправляются в *argv[]? Как мы их отправим?

8 73

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.

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

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