C語言 getopt函式

2021-06-19 07:20:11 字數 1979 閱讀 8961

函式原型:

#includeint getopt(int argc,char *const argv,const char *optstring);
extern char *optarg;
extern int optind,opterr,optopt;
optstring為乙個字元列表,每個字元代表乙個單字元選項

全域性變數:

optarg:存資料

optind

opterr:控制是否向stderr列印錯誤。若值為0,則關閉列印錯誤資訊

optopt:儲存出錯的option(如缺引數),或者不認識的option

函式說明:

getopt()用來分析命令列引數。引數argc和argv是由main()傳遞的引數個數和內容。引數optstring 則代表欲處理的選項字串。此函式會返回在argv 中下乙個的選項字母,此字母會對應引數optstring 中的字母。如果選項字串裡的字母後接著冒號「:」,則表示還有相關的引數,全域變數optarg 即會指向此額外引數。如果getopt()找不到符合的引數則會印出錯資訊,並將全域變數optopt設為「?」字元,如果不希望getopt()印出錯資訊,則只要將全域變數opterr設為0即可。

短引數定義:

getopt()使用opstring所指的字串作為短引數列表,像「krf:d::"就是乙個短引數列表,短引數的定義是乙個『-』後面跟乙個字母或數字(例如命令ls -a -l  getopt()函式接受前面有"-"的引數選項"a,l",當然ls -al也接受為"a,l")

其中短引數在getopt()定義分為下面幾種:

1.若optstring中有乙個字元後面緊跟乙個冒號「:」,則表明該選項有乙個關聯值作為下乙個引數(含f的引數要這樣寫" -f filename"),若有兩個冒號則代表則表示該關聯值可有可無(注意:可選關聯值的引數與關聯值之間不能有空格,例如」-dvalue"是合法的,然而"-d value"是不合法的)

2.不帶值得引數也就是說短引數列表中「r『就不用帶關聯值,還有不帶值的引數可以連寫,」k「與「r」就是不帶值的引數,在命令中可以寫成"-kr" 或者"-k -r"

3.引數順序不要求先後,例如"-kr -f opt.c -dopt"與"-f opt.c -dopt -kr"是合法的

返回值:

getopt()每次呼叫會逐次返回命令列傳入的引數。

當沒有引數的最後的一次呼叫時,getopt()將返回-1。

當解析到乙個不在optstring裡面的引數,或者乙個必選值引數不帶值時,返回'?',對於解析到乙個不在optstring裡面的引數的情況,函式會報錯,輸出乙個錯誤資訊,如果不想輸出錯誤資訊,設定全域性變數opterr為0就行或者用下面的方法(opstring開頭加個冒號":")

當optstring是以':'開頭時,缺值引數也就是引數後面缺少關聯值下會返回':',而不是'?' ,當然這不影響遇到解析到乙個不在optstring裡面的引數的情況,這種情況仍然返回'?',而且函式不會輸出錯誤資訊(不知道為什麼)

好了,接下來就是測試了,先貼**

文章參考:

至於optind的內容可以參考

C語言 getopt 函式

getopt 分析命令列引數 如果覺得本文不夠詳細,可以參考 使用 getopt 進行命令列處理 相關函式表頭檔案 include 定義函式 int getopt int argc,char const argv const char optstring 函式說明 getopt 用來分析命令列引數。...

C語言getopt 函式的使用

本文 getopt 分析命令列引數 相關函式表頭檔案 include 定義函式 int getopt int argc,char const argv const char optstring 函式說明 getopt 用來分析命令列引數。引數argc和argv是由main 傳遞的引數個數和內容。引數...

C語言getopt 函式的使用

getopt 分析命令列引數 相關函式表頭檔案 include 定義函式 int getopt int argc,char const argv const char optstring 函式說明 getopt 用來分析命令列引數。引數argc和argv是由main 傳遞的引數個數和內容。引數opt...