2010-07-06 44 views
3

可能重複:
Pass arguments into C program from command line.如何在C++的main()中獲得第一個參數?

mypro parameter 

當像上面運行,如何讓mypro的main()參數:

#include <iostream> 

int main() 
{ 
    char* str = "default_parameter"; 
    if(parameter_exists())str = parameter; 
    ... 
} 

如何實現的僞代碼以上?

+0

@KennyTM - 該問題的接受答案不能解釋t你需要以不同的方式聲明主體。 – ChrisF 2010-07-06 14:56:52

+0

其他問題是關於C,而不是C++。 C++的答案是完全一樣的,這不是微不足道的(也是一種恥辱)。真的應該是'int main(std :: vector args){}' – MSalters 2010-07-07 09:24:57

回答

12

只需要將(int argc, char *argv[])添加到您的主要功能。 argc擁有參數的數量,並且認爲參數本身。

int main(int argc, char *argv[]) 
{ 
    std::string str = "default"; 
    if (argc > 1) { str = argv[1]; } 
} 

請注意,該命令也包含作爲參數(例如可執行文件)。因此第一個參數實際上是argv [1]。

+0

請指定您應該添加(int argc,char ** argv)作爲主參數。 – Patrick 2010-07-06 14:47:28

+0

'string'與'char *'相同嗎? – user198729 2010-07-06 15:08:51

+0

@ user198729:'string'是一個C++字符串,如果您應該編寫C++代碼,則應該使用它。 'char *'是一個C字符串,除非你有很好的理由,否則你可能不應該在C++中使用它。 – 2010-07-06 15:17:21

3

你的函數應該使用這兩個允許C++主要功能的簽名的第二:

int main(void) 

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

在此,是的argc參數計數和argv是一個參數向量。請參閱Wikipedia article

2

那麼你需要一個接受的論點,像這樣一個主要功能:

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

} 

你會再檢查中使用argc傳遞的參數數目。通常總是有一個,即可執行文件的名稱,但我認爲這取決於操作系統,因此可能會有所不同。

1

main有兩個參數,int argc和char ** argv,您可以使用它們來訪問命令行參數。

argc是包含可執行文件名稱的參數數目,argv指向參數列表本身(因此argv [0]在您的示例中爲「mypro」)。

就宣佈主像 INT主(INT ARGC,焦炭** argv的){..}

2

您需要更改的主要是:

int main(int argc, char** argv){ 

argc是PARAMATERS數量,argv是一個包含所有參數的數組(索引0是程序的名稱)。您的第一個參數將位於argv的索引1處。

2
#include <iostream> 


using namespace std; 

int main(int argc, char* argv[]) { 
    for(int i = 1; i < argc; i++) 
     cout << atoi(argv[i]) << endl; 
    return 0; 
} 

這裏的argc給出的傳遞 和argv [I]給出第i個命令行參數的參數計數。

其中的argv [0] =

1

您需要使用此聲明的主要「程序本身的名字」:

int main(int argc, _TCHAR* argv[]) 
{ 
    if (argc > 1) 
    { 
     str = argv[1]; 
    } 
} 

argv[0]是可執行文件的名稱,這樣的參數在開始argv[1]

2

當期望命令行參數時,main()接受兩個參數:參數個數爲argc,實際參數值爲argv。請注意,argv[0]將始終是程序的名稱。

考慮調用的程序如下:./prog hello world

argc = 3 
argv[0] = ./prog 
argv[1] = hello 
argv[2] = world 

下面是一個小程序,反映了僞代碼:

#include <iostream> 
#include <string> 

int main(int argc, char **argv) { 
    std::string arg = "default"; 
    if (argc >= 2) { 
     default = argv[1] 
    } 
    return 0; 
} 
1

在Windows上,使用下面的簽名,而不是讓Unicode參數:

int wmain(int argc, wchar_t** argv) 
相關問題