c++ 的引數解析方法: getopt
阿新 • • 發佈:2019-01-23
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;
}
}