1. 程式人生 > >C++:Main函式引數列表及引數型別轉換

C++:Main函式引數列表及引數型別轉換

有三個問題待解決:

1、C/C++ main函式引數意義

2、怎麼向main函式傳參

3、傳進來的引數型別是什麼?怎麼型別轉換?

下面來分別分析!

首先,看程式碼,然後分析。

int main(int argc, char* argv[])
{
	cout << typeid(argv[0]).name()<<"  "<<argv[0]<<endl;
	cout << typeid(argv[1]).name() << "  " << argv[1] << endl;
	cout << typeid(argv[2]).name() << "  " << argv[2] << endl;
	cout << typeid(argv[3]).name() << "  " << argv[3] << endl;
	return 0;
}
其中,typeid(argv[0]).name()是獲取資料物件的型別函式。

1、main函式引數

C/C++語言中的main函式,經常帶有引數argc和argv,表示執行時可以帶上引數,如下:

int main(int argc, char** argv)
int main(int argc, char* argv[])
argc表示的是命令列輸入引數個數(以空白符分隔),char** argv可以看成char* argv[],即一個字串陣列,每個元素對應一個字串,值為字串的首地址。因此**argv就是字串的首字母。
假設程式名叫test.exe, 則預設第一個引數是test.exe。
2、傳參方式
第一種,直接在專案配置裡:專案——屬性——配置屬性——除錯——命令引數,設定命令引數就可以傳入,如傳入如下引數11 11.11 hello:
第二種,通過bat批量處理方式來傳參。考慮這種情形,類似於指令碼的目的,當我們想測試這個工程在不同引數下的執行結果,一般情況下是沒設定一遍引數執行一遍,等執行結束我們再重新設定再執行,這樣一遍又一遍,很耗費勞動力,通過設定bat批處理模式,在bat檔案中把我們的輸入引數全寫進去,我們只需要執行該bat檔案即可,簡單有方便!
在工程檔案的debug目錄下,建立一個bat空檔案,編輯輸入引數:
直接雙擊該bat檔案即可執行,輸出結果在三個txt檔案中:
每個txt檔案的輸出結果如下:
3、引數型別及其轉換
首先,假設設定的命令引數是:11 11.11 hello
執行結果如下:
說明,通過命令列引數傳進來的argv[]是char *型別,即都是字串型別。那麼,型別轉換問題就變成char*型別和其他諸如int, double, float,string型別之間的轉換了。見程式碼:
int main(int argc, char* argv[])
{
	//argv引數: 11(int),11.11(float/double),hello(string)
	
	//char* 轉 int
	int a = stoi(argv[1]);

	//char* 轉 float/double
	float b = stof(argv[2]);
	double bb = stod(argv[2]);

	//char* 轉 string (可以直接轉)
	string str = argv[3];
	cout << a << endl << b << endl << bb << endl << str << endl;

	return 0;
}