博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c/c++处理参数
阅读量:5852 次
发布时间:2019-06-19

本文共 3146 字,大约阅读时间需要 10 分钟。

直接上代码:涉及函数getopt(),getopt_long()

1 #include 
2 #include
3 #include
4 #include
5 6 /* 7 int main(int argc, char *argv[]) 8 { 9 int opt;10 char * optstring = "a:b:c:d";11 12 while ((opt = getopt(argc, argv, optstring)) != -1)13 {14 printf("opt = %c\n", opt);15 printf("optarg = %s\n", optarg);16 printf("optind = %d\n", optind);17 printf("argv[optind - 1] = %s\n\n", argv[optind - 1]);18 }19 20 return 0;21 }22 */23 24 //getopt_long()和getopt_long_only()函数支持长选项的命令行解析,其中,后者的长选项字串是以一个短横线开始的,而非一对短横线。25 int main(int argc, char **argv)26 {27 int opt;28 int digit_optind = 0;29 int option_index = 0;30 char *optstring = "a:b:c:d";31 static struct option long_options[] = { 32 {
"reqarg", required_argument, NULL, 'r'},33 {
"noarg", no_argument, NULL, 'n'},34 {
"optarg", optional_argument, NULL, 'o'},35 {
0, 0, 0, 0}36 }; 37 /* 38 *extern char *optarg; //选项的参数指针39 *extern int optind, //下一次调用getopt时,从optind存储的位置处重新开始检查选项40 *extern int opterr, //当opterr=0时,getopt不向stderr输出错误信息。41 *extern int optopt; //当命令行选项字符不包括在optstring中或者最后一个选项缺少必要的参数时,该选项存储在optopt中,getopt返回'?’42 *43 */44 45 while ( (opt = getopt_long(argc, argv, optstring, long_options, &option_index)) != -1)46 {47 printf("opt = %c\n", opt);48 printf("optarg = %s\n", optarg);49 printf("optind = %d\n", optind);50 printf("argv[optind - 1] = %s\n", argv[optind - 1]);51 printf("option_index = %d\n", option_index);52 }53 54 return 0;55 }

   int getopt(int argc, char * const argv[], const char *optstring);

  该函数用来解析命令行参数。前两个参数设为main函数的两个参数。

  optstring设为由该命令要处理的各个选项组成的字符串。选项后面带有冒号':'时,
  该选项是一个带参数的选项。
  例如:make -f filename -n
    -f是一个带参数的选项,-n是一个没有参数的选项。
  可以下面这样调用函数getopt来解析上面的例子。
    c = getopt(argc, argv, "f:n");
  此函数的返回值即为当前找到的命令选项,全部选项都找到时的返回值为-1。
  通常一个命令有多个选项,为了取得所有选项,需要循环调用此函数,直到返回值为-1。

  要使用此函数,还有几个全局变量必须要了解。

    extern char *optarg;  
    extern int optind, opterr, optopt;
    optarg: 当前选项带参数时,optarg指向该参数。
    optind: argv的索引。通常选项参数取得完毕时,通过此变量可以取得非选项参数(argv[optind])
    optopt: 一个选项在argv中有,但在optstring中不存在时,或者一个带参数的选项没有参数时,
         getopt()返回'?',同时将optopt设为该选项。
    opterr: 将此变量设置为0,可以抑制getopt()输出错误信息。

 int getopt_long(int argc, char * const argv[],

                  const char *optstring,

                  const struct option *longopts, int *longindex);

  这是支持长命令选项的函数,长选项以'--'开头。

    前三个参数与函数getopt的参数是一样的。只支持长选项时,参数optstring设置为NULL或者空字符串

  第四个参数是一个构造体struct option的数组。此构造体定义在头文件getopt.h中。

  struct option {
    const char *name;
    int has_arg;
    int *flag;
    int val;
  };
  构造体各个成员的解释如下
    name   : 长选项的名字
    has_arg: no_argument或0表示此选项不带参数,required_argument或1表示此选项带参数,optional_argument或2表示是一个可选选项。
    flag : 设置为NULL时,getopt_long()返回val,设置为NULL以外时,getopt_long()返回0,且将*flag设为val。
    val : 返回值或者*flag的设定值。有些命令既支持长选项也支持短选项,可以通过设定此值为短选项实现。
  此数组的最后一个须将成员都置为0。

  关于返回值有以下几种情况:

    识别为短选项时,返回值为该短选项。
    识别为长选项时,如果flag是NULL的情况下,返回val,如果flag非NULL的情况下,返回0。
    所有选项解析结束时返回-1。
    存在不能识别的选项或者带参数选项的参数不存在时返回'?

 

转载地址:http://zasjx.baihongyu.com/

你可能感兴趣的文章
NEUACM1132: Renew MST Quickly 增量最小生成树
查看>>
4.结对编程汇编
查看>>
闭包面试提 (2)
查看>>
php-字符串函数
查看>>
ftruncate(改变文件大小)
查看>>
简述Dubbo
查看>>
(转)三分钟玩转jQuery.noConflict()
查看>>
cURL中的超时设置
查看>>
软件开发过程学习笔记(四)之详细设计说明书模板 分类: 开发过程 ...
查看>>
vs的【warning C4996:'fopen': This function or variable may be unsafe】解决方案
查看>>
[LUOGU] P2245 星际导航
查看>>
【转】TabError:inconsistent use of tabs and spaces
查看>>
基于人脸识别的商业大数据14
查看>>
Class.forName("com.mysql.jdbc.Driver");的作用
查看>>
C# 泛型
查看>>
功能测试
查看>>
django的queryset和objects对象
查看>>
Dubbo架构设计简单了解
查看>>
网络编程:基于C语言的简易代理服务器实现(proxylab)
查看>>
badboy录制网站出现css样式混乱,网页的图标点击没反应
查看>>