2010-06-15 110 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