getopt处理命令行参数
函数说明
//函数原型,定义在<unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);
//描述:getopt是用来解析命令行选项参数的,但是只能解析短选项: -d 100,不能解析长选项:--prefix
//参数:argc:main()函数传递过来的参数的个数
//argv:main()函数传递过来的参数的字符串指针数组
//optstring:选项字符串,告知 getopt()可以处理哪个选项以及哪个选项需要参数
//返回值:若选项成功找到,返回选项字母;如果所有命令行选项都解析完毕,返回-1;如果遇到字符串不在optstring里,返回字符'?'
optstring参数
char *optstring = “ab:c::”;
单个字符a 表示选项a没有参数 格式:-a即可,不加参数
单字符加冒号b: 表示选项b有且必须加参数 格式:-b 100或-b100,但-b=100错
单字符加2冒号c:: 表示选项c可以有,也可以无 格式:-c200,其它格式错误
一些执行getopt生效的全局变量
optarg —— 指向当前选项参数(如果有)的指针。
optind —— 再次调用 getopt() 时的下一个 argv指针的索引。
optopt —— 最后一个未知选项。
opterr —— 如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
其他
处理长选项参数,可以使用类似的函数:getopt_long
代码示例
#include<stdio.h>
#include<unistd.h>
int main(int argc,char* argv[]){
int ret;
while( (ret = getopt(argc, argv, "ab:c::")) != -1 ){ //一般处理方式为循环处理,直到返回值为-1
switch (ret)
{
case 'a':
printf("a=%s", optarg);
printf("\t nextIndex=%d\n", optind);
break;
case 'b':
printf("b=%s", optarg);
printf("\t nextIndex=%d\n", optind);
break;
case 'c':
printf("c=%s", optarg);
printf("\t nextIndex=%d\n", optind);
break;
case '?':
default:
printf("default\n");
break;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术