日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实例讲解getopt()函数的使用

發(fā)布時間:2023/12/9 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实例讲解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);//是否將錯誤信息輸出到stderr,為0時表示不輸出??
  • ????printf("optind:%d\n",?optind);//記錄下一個檢索位置??
  • ????printf(">>>>>>>>>>>>>>>>>>>>>\n");??
  • ????opterr?=?1;??
  • ????while?((ch?=?getopt(argc,?argv,?"a:b::cde"))?!=?-1)?{//當a沒有傳入參數時,會執(zhí)行case?'?':??
  • ????//while?((ch?=?getopt(argc,?argv,?":a:b::cde"))?!=?-1)?{//當a沒有傳入參數時,會執(zhí)行case?':':??
  • ????????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);//不在選項字符串optstring中的選項。找不到參數的case?'?'和缺少選項的case?':'的選項??
  • }??


  • 函數說明: [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的執(zhí)行中,每次進入都會更新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,但要注意有參數時,參數與選項之間不能有空格(有空格會報錯),這一點和一個冒號時是有區(qū)別的。


    傳入的'-'開始的字符被解析為選項,getopt一次執(zhí)行解析出一個option,如果循環(huán)執(zhí)行,可以將argv中的全部option解析出來,如getopt返回-1,表示argv[]中的所有選項被解析出。

    總結

    以上是生活随笔為你收集整理的实例讲解getopt()函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。