getopt()用来分析命令行参数。
#include
int getopt(int argc, char * const argv[],const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
函数功能:短形参解析
形 参:argc、argv main函数参数
optstring 短形参格式。例:a: b::cv
一个’:’表示必带参数
两个’::’表示可带参数,带参数时第一参数必须和b之间不能有空格
没有’:’表示可选参数
返回值:解析成功返回短形参
解析失败返回?
解析完成返回-1
全局变量:
optarg – 保存短形参后面的第一个参数(必带参数和可带参数才能得到)
optind – 再次调用 getopt() 时的下一个 argv 指针的索引
opterr – 错误值信息
optopt – 参数解析失败是返回短形参值,成功则为0
#include
#include
int main(int argc,char *argv[])
{
int opt;
int cnt;
while(1)
{
opt=getopt(argc,argv,"a:b::vh");
if(opt==-1)break;
cnt=optind;
switch(opt)
{
case 'a':
printf("参数:%c\n",opt);
printf("\t内容:%s\n",optarg);
while(cnt
2.长形参解析getopt_long
#include
int getopt_long(int argc, char * const argv[],const char *optstring,const struct option *longopts, int *longindex);
函数功能:长形参解析
形 参:argc、argv main函数参数
optstring 短形参格式。例:a: b::cv
一个’:’表示必带参数
两个’::’表示可带参数,带参数时第一参数必须和b之间不能有空格
没有’:’表示可选参数
longopts 长形参结构体
struct option {
const char *name; //长形参名
int has_arg; //参数选择标志
int *flag; //一般填NULL
int val; //长形参解析成功返回标志信息
};
has_arg:
#define no_argument 0 //不需要参数
#define required_argument 1 //必须指定参数
#define optional_argument 2 //参数可选
Longindex:解析成成功返回的长形参结构体数组下标
返回值:解析成功返回短形参
解析失败返回?
解析完成返回-1
getopt_long完全兼容getopt短形参解析功能;在使用getopt_long实现长形参解析时,初始化长形参longopts时最后一个结构体成员一定要设置为全为0,否则会段错误。
#include
#include
struct option loqngopts[]=
{
{"version",no_argument,NULL,'v'},//不带参数
{"help",no_argument,NULL,'h'},//不带参数
{"prefix=",required_argument,NULL,'p'},//必带参数
{"a123",optional_argument,NULL,'a'},//可选参数
{0,0,0,0}, //最后一个成员必须全为0
};
int main(int argc,char *argv[])
{
int index;
int opt;
int cnt;
while(1)
{
opt=getopt_long(argc,argv,"a:b::vh",loqngopts,&index);
if(opt==-1)break;//解析完成
cnt=optind;
switch(opt)
{
case 'a':
printf("index=%d\n",index);
if(index<=sizeof(loqngopts)/sizeof(struct option))//长形参
{
printf("长形参:%s\n",loqngopts[index].name);
if(optarg!=NULL)
{
printf("\t内容:%s\n",optarg);
}
while(cnt)>
全部0条评论
快来发表一下你的评论吧 !