Поделиться через


Определения аргументов

Аргументы в прототипе

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

позволяют удобно выполнять синтаксический разбор аргументов в командной строке и дополнительно осуществлять доступ к переменным среды. Используются следующие определения аргументов.

  • argc
    Целое число, которое содержит количество аргументов, следующих в argv. Параметр argc всегда больше или равен 1.

  • argv
    Массив завершающихся null строк, представляющих введенные пользователем программы аргументы командной строки. По соглашению argv**[0]** — это команда, с помощью которой вызывается программа, argv**[1]** — это первый аргумент командной строки и так далее до argv**[argc]**, который всегда имеет значение NULL. См. сведения о подавлении обработки в командной строке в разделе Настройка обработки командной строки.

    Первый аргумент командной строки — всегда argv**[1], а последний — argv[argc – 1]**.

    Примечание

    По соглашению argv[0] — это команда, с помощью которой вызывается программа. Однако процесс можно инициализировать с помощью CreateProcess, и при использовании и первого, и второго аргумента (lpApplicationName и lpCommandLine) argv[0] может не быть именем исполняемого файла; используйте GetModuleFileName для получения имени исполняемого файла и полного пути к нему.

Блок, относящийся только к системам Microsoft

  • envp
    Массив envp, представляющий собой общее расширение во многих системах UNIX, используется в Microsoft C++. Это массив строк, представляющих переменные, заданные в среде пользователя. Этот массив завершен записью NULL. Его можно объявить как массив указателей на char (char *envp[ ]) или как указатель на указатели на char (char **envp**). Если программа использует wmain вместо main, следует использовать тип данных wchar_t вместо char. Блок среды, передаваемый в main и wmain, является "зафиксированной" копией текущей среды. Если впоследствии среда будет изменена путем вызова putenv или _wputenv, изменится только текущая среда (возвращенная getenv/_wgetenv** и переменной _environ или _wenviron); блок, на который указывает envp, останется неизменным. См. сведения о подавлении обработки в среде в разделе Настройка обработки командной строки. Этот аргумент совместим с ANSI в C, но не в C++.

Пример

В следующем примере показано использование аргументов argc, argv и envp в main.

// argument_definitions.cpp
// compile with: /EHsc
#include <iostream>
#include <string.h>

using namespace std;
int main( int argc, char *argv[], char *envp[] ) {
    int iNumberLines = 0;    // Default is no line numbers.

    // If /n is passed to the .exe, display numbered listing
    // of environment variables.

    if ( (argc == 2) && _stricmp( argv[1], "/n" ) == 0 )
         iNumberLines = 1;

    // Walk through list of strings until a NULL is encountered.
    for( int i = 0; envp[i] != NULL; ++i ) {
        if( iNumberLines )
            cout << i << ": " << envp[i] << "\n";
    }
}

См. также

Ссылки

Функция main. Запуск программы