[c language] getopt 其參數optind 及其main(int argc, char **argv) 參數解釋

來源:互聯網
上載者:User

標籤:style   blog   color   for   io   div   

getopt被用來解析命令列選項參數。
#include <unistd.h>

extern char *optarg; //選項的參數指標
extern int optind, //下一次調用getopt的時,從optind儲存的位置處重新開始檢查選項。
extern int opterr, //當opterr=0時,getopt不向stderr輸出錯誤資訊。
extern int optopt; //當命令列選項字元不包括在optstring中或者選項缺少必要的參數時,該選項儲存在optopt 中,getopt返回‘?’

 

 1 #include <stdio.h>   2 #include <unistd.h>   3 #include <stdlib.h> 4  5 #ifdef RDP2 6 #define VNCOPT "V:Q" 7 #else 8 #define VNCOPT "V:" 9 #endif10  11 int main(int argc, char **argv)  12 {  13         int ch, i;  14         opterr = 0;15 16         while ((ch = getopt(argc,argv, VNCOPT ":a:bcde::f"))!=-1)  17         {  18             printf("optind:%d,opterr:%d\n", optind, opterr);  19                 switch(ch)  20                 {         21                         case ‘V‘:22                                 printf("option V:‘%s‘\n",optarg);23                                 break; 24                         case ‘a‘: 25                                 i = strtol(optarg, NULL, 16);26                                 printf("i = %x\n", i); 27                                 printf("option a:‘%s‘\n",optarg);  28                                 break;  29                         case ‘b‘:  30                                 printf("option b :b\n");  31                                 break; 32                         case ‘e‘:33                                 printf("option e:‘%s‘\n",optarg);34                                 break; 35                         default:  36                                 printf("other option :%c\n",ch);  37                 }  38         }39         for(int i = 0; i < argc; i++)40             printf("argv[%d] = [%s]\n", i, argv[i]);41         printf("argc = [%d]\n", argc); 42         printf("optopt +%c\n",optopt);  43 44     return 1;45 }

 執行結果:

$ ./getopt -a 123 -bcd -e 456i = 123option a:‘123‘optind:3,opterr:0option b :boptind:3,opterr:0other option :coptind:3,opterr:0other option :doptind:4,opterr:0option e:‘456‘optind:6,opterr:0argv[0] = [./getopt]argv[1] = [-a]argv[2] = [123]argv[3] = [-bcd]argv[4] = [-e]argv[5] = [456]argc = [6]optopt +eoptind = 6

 

 argv 數組儲存命令列字串(包含./getopt執行程式)

 argc 命令列字串個數(./getopt -a 123 -bcd -e 456) 6個

 optind 下一次調用getopt的時,從optind儲存的位置處重新開始檢查選項。從0開始計算

 (對應下面位置)

 ./getopt -a 123 -bcd -e 456

      0       1   2     3     4   5   6

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.