getopt和getopt_long函數
1.介紹getopt
int getopt(int argc, char * const argv[],
const char *optstring);
getopt函數的前兩個參數,就是main函數的argc和argv,這兩者直接傳入即可,要考慮的就只剩下第三個參數。
optstring的格式舉例說明比較方便,例如:
char *optstring = “abcd:”;
上面這個optstring在傳入之後,getopt函數將依次檢查命令行是否指定了 -a, -b, -c及 -d(這需要多次調用getopt函數,直到其返回-1),c才能檢查完所有你輸入的參數。因爲每次檢查一個參數,當檢查到上面某一個參數被指定時,函數會返回被指定的參數名稱(即該字母)
最後一個參數d後面帶有冒號,代表可以加指定的參數,如 -d 10086
optind表示的是下一個將被處理到的參數在argv中的下標值。
如果指定opterr = 0的話,在getopt、getopt_long遇到錯誤將不會輸出錯誤信息到標準輸出流。
代碼和運行結果:
2介紹getopt_long函數
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
2.1
在這裏第一個多餘的參數:longopts指向的是一個由option結構體組成的數組,這是已經定義好的,你動態調用就行。
結構如下:
struct option {
const char *name;
//是參數的名稱
int has_arg;
//無參0有參1都行2
int *flag;
//flag = 0函數返回val
int val;
//指定函數找到選項時候的番薯返回值或者flag指向的值
};
2.2
如果longindex不爲,0,,即是找到參數在longopts中的下標值。
代碼:
結果: