2010-06-15 2 views
1

Каков стандартный способ извлечения и проверки argc и argv, а также то, что лучше всего использовать и как это сделать в Linux?Как я могу использовать argc и argv на C++, стандартный способ?

Просьба привести примеры.

«Я хочу иметь сложные параметры командной строки, и я хочу использовать их в своем приложении» Что я имею в виду.

Благодаря

+1

Что значит «проверить»? Либо у вас есть 'int main()', либо у вас есть 'int main (int argc, char * argv [])'. Если у вас есть первый, у вас нет вектора аргументов, если у вас есть последний, который вы делаете. –

+0

Что вы пытаетесь достичь? Куча простых аргументов? Сложные параметры командной строки? – Cascabel

+6

Чрезвычайно непонятный вопрос. Вам не нужно извлекать argc/argv - они передаются вам в качестве аргументов в 'main()'. –

ответ

7

P лизинг использует дополнительные параметры программы http://www.boost.org/doc/html/program_options.html для доступа к аргументам команды.

+1

+1 для показа OP, где купить колесо, а не строить. –

2
int main(int argc, char* argv[]) 
{ 
    for(int i = 0; i < argc; i++) 
     printf("%s\n", argv[i]); 
} 

работает как C и C++, хотя в C++ вы должны включать cstdio и в C, вы должны включать в себя stdio.h.

+1

-1 для рекомендации printf –

+2

В отличие от правильного ответа на фактический вопрос? Я не эксперт на C++, поэтому извините мое невежество, но что такого ужасающего в 'printf'? – Jeriko

+0

Если вопрос был помечен как C, тогда printf будет в порядке. Но этот вопрос отмечен как C++, поэтому вы должны использовать безопасный механизм типа, предоставленный вам языком, не полагающимся на обратную совместимость с другим языком. –

7

Там (по крайней мере) два способа написать main функции:

int main() 
{ 
} 

и

int main(int argc, char* argv[]) 
{ 
} 

Если вы используете второй вариант, то ваши аргументы командной строки будут в argv, который имеет argc № элементов:

#include <iostream> 
int main(int argc, char* argv[]) 
{ 
    for (int i = 0; i < argc; ++i) 
    { 
    std::cout << "arg #" << i << ": " << argv[i] << std::endl; 
    } 
} 
+0

+1 для использования потоков C++. –

+0

+1 для отображения синтаксиса массива, когда столько всего «char ** argv». Я знаю, что это то же самое – pestilence669

+0

'std :: vector аргументы (argv, arv + argc);' –

4

Что вы хотите сделать с этим?

Простой пример использования, как следующее:

// Get numbers from the command line, and put them in a vector. 
int main(int argc, char* argv[]) 
{ 
    /* get the numbers from the command line. For example: 

      $ my_prog 1 2 3 4 5 6 7 8 9 10 
    */ 
    std::vector<int> numbers(argc-1); 
    try 
    { 
     std::transform(argv+1, argv+argc, numbers.begin(), 
         boost::lexical_cast<int, char*>); 
    } 
    catch(const std::exception&) 
    { 
     std::cout << "Error: You have entered invalid numbers."; 
    } 
} 

Это зависит от того, что вы пытаетесь сделать. Если у вас много аргументов и т. Д. Тогда лучше использовать что-то вроде boost program options.

+0

+1 для std :: transform –