生活随笔
收集整理的這篇文章主要介紹了
实例讲解getopt()函数的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[cpp]?view plaincopy
#include?<stdio.h>?? #include?<unistd.h>?? ?? int?main(int?argc,?char?*argv[])?{?? ????extern?char?*optarg;?? ????extern?int?optind,?opterr,?optopt;?? ????int?ch;?? ?? ????printf("\n\n");?? ????printf("otperr:%d\n",?opterr);?? ????printf("optind:%d\n",?optind);?? ????printf(">>>>>>>>>>>>>>>>>>>>>\n");?? ????opterr?=?1;?? ????while?((ch?=?getopt(argc,?argv,?"a:b::cde"))?!=?-1)?{?? ?????? ????????printf("optind:%d\n",?optind);?? ????????printf("optarg:%s\n",?optarg);?? ????????printf("ch:%c\n",?ch);?? ????????switch?(ch)?{?? ????????case?'a':?? ????????????printf("option?a:?'%s'\n",?optarg);?? ????????????break;?? ????????case?'b':?? ????????????printf("option?b:?'%s'\n",?optarg);?? ????????????break;?? ????????case?'c':?? ????????????printf("option?c\n");?? ????????????break;?? ????????case?'d':?? ????????????printf("option?d\n");?? ????????????break;?? ????????case?'e':?? ????????????printf("option?e\n");?? ????????????break;?? ????????case?':':?? ????????????printf("option?lost...\n");?? ????????????break;?? ????????case?'?':?? ????????????printf("unknow?option?:%c\n",?ch);?? ????????}?? ????}?? ????printf("optopt?+%c\n",?optopt);?? }??
函數說明:
[cpp] view plaincopy
#include?<unistd.h>??extern?char?*optarg;??extern?int?optind,?opterr,?optopt;??int?getopt(int?argc,?char?*?const?argv[],?const?char?*optstring);??
optarg:選項的參數指針
optind:記錄下一個檢索位置,在getopt的執行中,每次進入都會更新optind變量,該變量指向下一個argv參數
opterr:是否將錯誤信息輸出到stderr,為0時表示不輸出
optopt:當命令行選項字符不包括在optstring中或者選項缺少必要的參數時,該選項存儲在optopt中,getopt返回'?’
optstring說明:
"a:b::cde",這就是一個選項字符串。對應到命令行就是-a ,-b ,-c ,-d, -e 。冒號又是什么呢? 冒號表示參數,一個冒號就表示這個選項后面必須帶有參數,如果optstring中指定了option需要參數,但在命令行沒有參數,那么getopt將返回'?',如果在optstring的第一個字符(或者在第一個字符是+/-之后)是':',那么將返回':',這個參數可以和選項連在一起寫,也可以用空格隔開,比如-a123 和-a ? 123(中間有空格) 都表示123是-a的參數;兩個冒號的就表示這個選項的參數是可選的,即可以有參數,也可以沒有參數,若有參數,optarg指向該該參數,否則optarg為NULL,但要注意有參數時,參數與選項之間不能有空格(有空格會報錯),這一點和一個冒號時是有區別的。
傳入的'-'開始的字符被解析為選項,getopt一次執行解析出一個option,如果循環執行,可以將argv中的全部option解析出來,如getopt返回-1,表示argv[]中的所有選項被解析出。
總結
以上是生活随笔為你收集整理的实例讲解getopt()函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。