最近一直在Linux下写程序,命令行参数一般都是手动写程序分析处理,特别麻烦而求代码也很乱。最近发现有getopt()可以帮助进行参数分析,方便了很多。但是发现一个问题,getopt()每个选项只能用optarg获得一个参数,要是想要获得两个以上的参数就没办法了。在网上查了以下也没有什么特别好的办法。虽然getopt_long()可以获得多个参数,但是这个函数需要的参数太多了,不喜欢用。后来看了以下getopt的介绍自己想出了一个办法,看着还不错。分享1下,如果你也想到了这种方法,纯属有缘哈。
先粘上getopt的介绍,获取两个以上参数的方法写在后面。
函数说明 getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的。参数 optstring为选项字符串, 告知 getopt()可以处理哪个选项以及哪个选项需要参数,如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果在处理期间遇到了不符合optstring指定的其他选项getopt()将显示一个错误消息,并将全域变量optarg设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
#include <stdio.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int ch;char *seg;
while((ch = getopt(argc,argv,"a:"))!= -1)
{
switch(ch)
{
case 'a': seg=optarg; break;
default: printf("unrecongnized option :%c\n",ch);
}
printf("option's seg: +%s\n",seg);
}
return 0;
}
假如我们的程序名叫main,那么运行一下:main -a aa bb cc
我们可以很容易用oprarg变量得到第一个参数aa,而后面的参数bb cc 甚至dd ee ff怎么办呢?
#include <stdio.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int ch;
char *seg1,*seg2,*seg3;
while((ch = getopt(argc,argv,"a:"))!= -1)
{
switch(ch)
{
case 'a':
{
seg1=optarg;
seg2=argv[optind];
seg3=argv[optind+1];
}; break;
default: printf("unrecongnized option :%c\n",ch);
}
printf("option's seg1: +%s\n",seg1);
printf("option's seg2: +%s\n",seg2);
printf("option's seg3: +%s\n",seg3);
} return 0; }
还是运行一下:main -a aa bb cc
在Linux下编写程序时,getopt()函数通常用于解析命令行参数。然而,标准的getopt()只能获取每个选项的一个参数。本文探讨了当需要获取两个以上参数时遇到的问题,以及如何通过创新方法解决这个问题,避免使用参数较多的getopt_long()。通过调整getopt的使用,实现了对多个参数的处理,使得命令行参数的分析更加简洁高效。

1084

被折叠的 条评论
为什么被折叠?



