假设要解析的命令行参数如下:
getopts.exe [--port 9000] --freq 1 --size 5 --file filename
#include <stdio.h>
int getOpts(int argc, char **argv);
int main(int argc, char* argv[])
{
if(1!=getOpts( argc, argv)){
printf("e.g.\ngetopts.exe --port 9000 --freq 1 --size 5 --file filename\n");
}
return 0;
}
int getOpts(int argc, char **argv)
{
int port,size,hz;
char filepath[120];
int hasPort,hasFreq,hasSize,hasFile=0;
for (int i=1;i<argc;i++) {
if (!strcmp(argv[i],"--port")&&i+1<argc) {
port=atoi(argv[++i]);
printf("port:%d\n",port);
hasPort=1;
}
else if (!strcmp(argv[i],"--freq")&&i+1<argc) {
hz=atoi(argv[++i]);
printf("hz:%d\n",hz);
hasFreq=1;
}
else if (!strcmp(argv[i],"--size")&&i+1<argc) {
size=atoi(argv[++i]);
printf("size:%d\n",size);
hasSize=1;
}
else if (!strcmp(argv[i],"--file")&&i+1<argc) {
strcpy(filepath,argv[++i]);
printf("file:%s\n",filepath);
hasFile=1;
}
else {
return -1;
}
}
return hasFreq&&hasSize&&hasFile;
}
程序运行结果:
通过代码的最后一行,我们实际上做的是可选参数的筛选,实例中只有port这个参数是可选参数。运行结果中的最后一次运行也做了验证。
当获取参数失败时,会将使用示例打印出来。