2010-06-15 45 views
1

检查argc和argv的标准方法是什么?在linux中最好的用法是什么?我如何从C++中的argc和argv中受益?

请提供示例。

“我想要一个复杂的命令行选项,我想在我的应用程序中使用它们” 那就是我的意思。

感谢

+1

你是什么意思“检查?”无论你有'int main()'还是你有'int main(int argc,char * argv [])''。如果你有前者,你就没有参数向量,如果你有后者的话。 – 2010-06-15 17:16:11

+0

你想完成什么?一堆简单的参数?复杂的命令行选项? – Cascabel 2010-06-15 17:16:45

+6

非常不清楚的问题。您不必检索argc/argv - 它们作为参数传递给'main()'。 – 2010-06-15 17:16:46

回答

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 – 2010-06-15 17:25:11

+2

而不是正确回答实际问题?我不是C++专家,所以请原谅我的无知,但是'printf'有什么可怕的地方? – Jeriko 2010-06-15 17:28:00

+0

如果问题被标记为C,那么printf就可以。但是这个问题被标记为C++,因此您应该使用为您提供的类型安全机制,而不是依赖于与其他语言的向后兼容性的语言。 – 2010-06-15 18:00:27

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

使用C++流+1。 – 2010-06-15 17:25:41

+0

用于显示数组语法的+1,如此多的只是“char ** argv”。我知道这是相同的 – pestilence669 2012-04-01 23:55:45

+0

'std :: vector 参数(argv,arv + argc);' – 2012-05-24 00:49:09

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 – 2010-06-15 17:26:38