首页 > 代码库 > [c language] getopt 其参数optind 及其main(int argc, char **argv) 参数解释
[c language] getopt 其参数optind 及其main(int argc, char **argv) 参数解释
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个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。