1. 程式人生 > >c++ 的引數解析方法: getopt

c++ 的引數解析方法: getopt

C++ 中自帶了一個引數解析方法: getopt(int argc, char *const *argv, const char *shortopts),用於處理向main函式傳入的資料

表頭檔案 #include<unistd.h>

函式的幾個引數分別代表著:

int argc:引數的個數,等同於 main(int argc, char* argv[ ] )中的第一個引數

char *const *argv:引數陣列,等同於 main(int argc, char* argv[ ] )中的第二個引數

const char *shortopts:解析格式。

主要講解一下 shortopts 這個引數:

假設我們傳入到main函式的引數是  -f xxx.txt -s -t

那麼我們需要給入到getopt函式的shortopts變數值就應該是:  f:st

於是main函式就會知道: 引數f被輸入了,其帶有一個值是 xxx.txt

                                              引數s被輸入了,不需要附帶一個值

                                              引數t被輸入了,也不需要附帶一個值 

現在將shortopts分為兩部分來看,一部分是冒號 “:”,另一部分是單個字元,例如: u,f,a,s,r,t

每一個字元表示一個引數,當你在傳入 -x(x表示一個字元) 的時候,getopt方法就可以匹配到這個x

而每一個冒號則表示,冒號前面的這個引數,需要附帶一個值,例如  -f xxx.txt 

使用的程式碼如下:

                opterr = 0; //標頭檔案中自帶的一個全域性變數,用於迴圈引數
		char ch;
                //迴圈取出引數,然後進行匹配。如果有附加值的,使用 <span style="font-family: Arial, Helvetica, sans-serif;">optarg 讀取</span>
<span style="font-family:Arial, Helvetica, sans-serif;">               //如果switch中case到了某個字元,表示輸入的引數中,包含了 -x 引數</span>
<span style="font-family:Arial, Helvetica, sans-serif;">               //</span><span style="font-family: Arial, Helvetica, sans-serif;">options 是我自定義的一個類,用於儲存引數值,判斷是否啟用了某個引數,以及其附帶的值</span><span style="font-family:Arial, Helvetica, sans-serif;">
</span>		while( (ch = getopt(argc,argv, “u:f:asr:t” ) ) != -1){
			switch(ch){
			case 'u':
				options.getURL = true;
				options.Url = optarg;
				break;
			case 'f':
				options.getFromFile = true;
				options.fileName = optarg;
				break;
			case 'a':
				options.getALL = true;
				break;
			case 's':
				options.runScript = true;
				break;
			case 'r':
				options.checkScript = true;
				options.ruleFile = optarg;
				break;
			case 't':
				options.showTime = true;
				break;
			}
		}