c语言 - 解析命令行参数

c语言 - 解析命令行参数,getopt()getopt_long()

参数解析

函数原型
int getopt(int argc, char *argv[], const char *optstr);

  • 头文件unistd.h,支持解析短选项,如-h
  • argc:输入参数,参数个数,也就是main()中的argc
  • argv:输入参数,参数列表,也就是main()中的argv
  • optstr:输入参数,选项处理方式,定义如何解析传入的参数
  • 返回值:getopt()逐个扫描选项,选项解析成功则返回选项,遇到未知选项则返回’?’,直到全部读取完毕,返回-1

选项处理方式

  • 单个字符,如a:表示一个选项a
  • 单个字符后接:,如a::表示选项a后必须有参数值,参数可以紧跟选项,也可以空格隔开,若无参数则输出错误信息
  • 单个字符后接::,如a:::表示选项a后必须有参数值,参数必须紧跟选项,不能空格隔开,默认参数为0

相关全局变量

  • extern char *optarg:有参数的选项的参数指针,如"a:",传入参数"./main -a www.zfl9.com",则optarg指向”www.zfl9.com”
  • extern int optind:argv[]数组的索引;因为一般选项参数是从argv[1]开始,所以optind初始化为1,下一次调用getopt()函数,从optind位置重新开始检查选项,即从下一个‘-’选项开始
  • extern int opterr:初始化值为1;当值为0时,getopt()不向stderr输出错误信息
  • extern int optopt:当选项不在optstr中或者选项缺少必要的参数时,该选项存储在optopt中,并且函数getopt()函数返回’?’

getopt_demo.c

长选项解析
int getopt_long(int argc, char *argv[], const char *optstr, const struct option *opts, int *longindex);

  • 头文件getopt.h,支持解析短选项、长选项,如-h--help
  • 前三个参数同getopt(),选项处理方式及4个全局变量同getopt()
  • opts:输入参数,一个指向结构体option的数组
  • longindex:输入参数,一般用于调试,一般我们设置为NULL
  • 返回值:同getopt()

option结构体

例如:

注意:最后一个元素必须为{0, 0, 0, 0},以标识结构体数组的结束,否则出现段错误

getopt_long_demo.c