C语言中使用库函数解析命令行参数
在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序。
C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt、getopt_long。
getopt可以解析短参数,所谓短参数就是指选项前只有一个“-”(如-t),而getopt_long则支持短参数跟长参数(如"--prefix")。
getopt函数
#include<unistd.h> int getopt(int argc,char * const argv[],const char *optstring);extern char *optarg; //当前选项参数字串(如果有) extern int optind; //argv的当前索引值
各参数的意义:
argc:通常为main函数中的argc
argv:通常为main函数中的argv
optstring:用来指定选项的内容(如:"ab:c"),它由多个部分组成,表示的意义分别为:
1.单个字符,表示选项。
2 单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。
调用该函数将返回解析到的当前选项,该选项的参数将赋给optarg,如果该选项没有参数,则optarg为NULL。下面将演示该函数的用法
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <string.h> 4 5 int main(int argc,char *argv[]) 6 { 7 int opt=0; 8 int a=0; 9 int b=0; 10 char s[50]; 11 while((opt=getopt(argc,argv,"ab:"))!=-1) 12 { 13 switch(opt) 14 { 15 case 'a':a=1;break; 16 case 'b':b=1;strcpy(s,optarg);break; 17 } 18 } 19 if(a) 20 printf("option a\n"); 21 if(b) 22 printf("option b:%s\n",s); 23 return 0; 24 }
View Code
编译之后可以如下调用该程序
getopt_long函数
与getopt不同的是,getopt_long还支持长参数。
#include <getopt.h> int getopt_long(int argc, char * const argv[],const char *optstring,const struct option *longopts, int *longindex);
前面三个参数跟getopt函数一样(解析到短参数时返回值跟getopt一样),而长参数的解析则与longopts参数相关,该参数使用如下的结构
struct option {//长参数名const char *name;/*表示参数的个数no_argument(或者0),表示该选项后面不跟参数值required_argument(或者1),表示该选项后面一定跟一个参数optional_argument(或者2),表示该选项后面的参数可选*/int has_arg;//如果flag为NULL,则函数会返回下面val参数的值,否则返回0,并将val值赋予赋予flag所指向的内存int *flag;//配合flag来决定返回值int val; };
参数longindex,表示当前长参数在longopts中的索引值,如果不需要可以置为NULL。
下面是使用该函数的一个例子
1 #include <stdio.h> 2 #include <string.h> 3 #include <getopt.h> 4 5 int learn=0; 6 static const struct option long_option[]={ 7 {"name",required_argument,NULL,'n'}, 8 {"learn",no_argument,&learn,1}, 9 {NULL,0,NULL,0} 10 }; 11 12 int main(int argc,char *argv[]) 13 { 14 int opt=0; 15 while((opt=getopt_long(argc,argv,"n:l",long_option,NULL))!=-1) 16 { 17 switch(opt) 18 { 19 case 0:break; 20 case 'n':printf("name:%s ",optarg); 21 } 22 } 23 if(learn) 24 printf("learning\n"); 25 }
View Code
编译之后可以如下调用该程序
转载于:https://www.cnblogs.com/runnyu/p/4943704.html
C语言中使用库函数解析命令行参数相关推荐
- 从源码的角度看Go语言flag库如何解析命令行参数!
我上周五喝酒喝到晚上3点多,确实有点罩不住啊,整个周末都在休息和睡觉,文章鸽了几天,想不到就有两个人跑了. 不得不感叹一下,自媒体的太残酷了,时效就那么几天,断更就没人爱.你们说好了爱我的,爱呢?哼 ...
- 如何在Java中解析命令行参数?
在Java中解析命令行参数的好方法是什么? #1楼 我不建议使用Apache Common CLI库,因为它是非线程安全的. 它使用带有静态变量和方法的有状态类来进行内部工作(例如OptionBuil ...
- Python 中的解析命令行参数
argparse argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生 ...
- 在C#中解析命令行参数的最佳方法? [关闭]
构建带有参数的控制台应用程序时,可以使用传递给Main(string[] args) . 过去,我只是索引/循环该数组,并做了一些正则表达式来提取值. 但是,当命令变得更复杂时,解析可能会变得很丑陋. ...
- Python3中使用argparse模块解析命令行参数
argparse是Python的一个标准模块,用于解析命令行参数,即解析sys.argv中定义的参数.实现在:https://github.com/python/cpython/blob/main/L ...
- python使用argparse解析命令行参数
python使用argparse解析命令行参数 你的程序如何能够解析命令行选项(位于sys.argv中) #示意使用sys.argv进行参数解析: #注意,sys.argv中第0个索引是函数本身,所以 ...
- python 命令-python解析命令行参数的三种方法详解
这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...
- python输入正方形边长值、计算其面积_尝试修改列6.2编写命令行参数解析的程序,解析命令行参数所输入边长的值,计算并输出正方形的周长和面积。_学小易找答案...
[简答题] [单选题]ZigBee 中每个协调点最多可连接______个节点,一个ZigBee网络最多可容纳______个节点.( ) [资料题]DWord-Ans.pdf 索引和目录.pdf 完成效 ...
- UE4如何解析命令行参数
http://blog.csdn.net/chinahaerbin/article/details/51517896 UE4如何解析命令行参数 [cpp] view plaincopy // 获取命令 ...
最新文章
- 一道拉普拉斯逆变换练习题和对应的数值计算方法
- EMC NetWorker恢复oracle指南
- DM365 dvsdk_2_10_01_18开发环境搭建
- laravel中的数据迁移表结构、字段类型、定义整理
- 通过Spring Data Neo4J操作您的图形数据库
- 一套漂亮的Bootstrap模板
- linux关闭cups命令,使用linux的cupsenable命令启动指定的打印机
- 【状压DP】poj2686 Traveling by Stagecoach
- 迷途指针 new delete
- 为什么我们应该使用 HTML5 开发网站
- 动态代理的好处是什么
- 入手评测 戴尔游匣G15锐龙版 怎么样
- eNSP-配置单臂路由与静态路由实验
- 六星经典CSAPP笔记(2)信息的操作和表示
- [NOIP模拟赛]棋子游戏
- 图像互信息(MI)的计算(Python版本)
- thymeleaf笔记
- 09年第33周,时尚数码3c超人加潮人10大酷品装备推荐(上)
- 【效能工具】记录常用效能工具
- PHP开发人员的8个分布式计算谬论