C++ 中自带了一个参数解析方法: getopt(int argc, char *const *argv, const char *shortopts),用于处理向main函数传入的数据
表头文件 #include<unistd.h>
函数的几个参数分别代表着:
int argc:参数的个数,等同于 main(int argc, char* argv[ ] )中的第一个参数
char *const *argv:参数数组,等同于 main(int argc, char* argv[ ] )中的第二个参数
const char *shortopts:解析格式。
主要讲解一下 shortopts 这个参数:
假设我们传入到main函数的参数是 -f xxx.txt -s -t
那么我们需要给入到getopt函数的shortopts变量值就应该是: f:st
于是main函数就会知道: 参数f被输入了,其带有一个值是 xxx.txt
参数s被输入了,不需要附带一个值
参数t被输入了,也不需要附带一个值
现在将shortopts分为两部分来看,一部分是冒号 “:”,另一部分是单个字符,例如: u,f,a,s,r,t
每一个字符表示一个参数,当你在传入 -x(x表示一个字符) 的时候,getopt方法就可以匹配到这个x
而每一个冒号则表示,冒号前面的这个参数,需要附带一个值,例如 -f xxx.txt
使用的代码如下:
opterr = 0; //头文件中自带的一个全局变量,用于循环参数
char ch;
//循环取出参数,然后进行匹配。如果有附加值的,使用 <span style="font-family: Arial, Helvetica, sans-serif;">optarg 读取</span>
<span style="font-family:Arial, Helvetica, sans-serif;"> //如果switch中case到了某个字符,表示输入的参数中,包含了 -x 参数</span>
<span style="font-family:Arial, Helvetica, sans-serif;"> //</span><span style="font-family: Arial, Helvetica, sans-serif;">options 是我自定义的一个类,用于存储参数值,判断是否启用了某个参数,以及其附带的值</span><span style="font-family:Arial, Helvetica, sans-serif;">
</span> while( (ch = getopt(argc,argv, “u:f:asr:t” ) ) != -1){
switch(ch){
case 'u':
options.getURL = true;
options.Url = optarg;
break;
case 'f':
options.getFromFile = true;
options.fileName = optarg;
break;
case 'a':
options.getALL = true;
break;
case 's':
options.runScript = true;
break;
case 'r':
options.checkScript = true;
options.ruleFile = optarg;
break;
case 't':
options.showTime = true;
break;
}
}