C: getopt函数

c语言库函数getopt:用于解析main函数输入 getopt用户解析main函数控制台输入的实操性学习案列 阅读详情

1、getopt函数说明

#include<unistd.h>
extern char *optarg;
extern int optind, opterr, optopt;
int getopt(int argc, char * const argv[], const char *optstring)
/* *
 * @作用:是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,其格式如下:
 *   cmd [-a][-b] 对短选项的解析
 *   cmd [-a argument_a][-b argument_b] 对短选项及短选项的参数解析
 *   cmd [-a[argument_a]] 选项a长度参数也是可选的情况解析
 * @参数说明:
 *   argc,argv:为调用main函数时传入的参数。传入的‘-’开始的字符被解析为选项,getopt一次执行解析出一个
 * option,如果循环执行,可以将argv中的全部option解析出来;
 *   optstring:指定选项合法的选项,一个字符代表一个选项,在字符后面接一个‘:'表示该选项带一个参数,字符
 * 后带两 个‘:’表示该选项带可选参数(参数可有可无)若有参数,用optarg指向该参数,否则optarg为0;
 * 
 * @返回值:
 *   int,函数返回值,有以下几种情况:
 *        1. 传入的argv所有参数已经被解析完成,getopt函数返回-1;
 *        2. 如果argv中解析出optstring中描述的选项字符,则返回该字符,如果该选项指定了参数,
 *           则全局变量optarg指向该参数
 *        3. 如果getopt遇到一个非optstring指定的选项字符,这表示该选项是未识别的,返回'?',
 *           并且将该选项存放到全局变量optopt中
 *        4. 如果optstring指定了选项必须带参数,但传入的相应option丢失了参数,返回值依赖于
 *           optstring的第一个字符,若第一个字符是':',返回':',否则返回'?';由于非法的选项
 *           返回也是'?',所以常常optstring的第一个字符指定为':';同时将该选项存放到全局变量
 *           optopt中
 * 
 * @extern 变量说明:
 *   optarg:用来保存选项的参数
 *   optind:记录下一个检索的位置
 *   opterr:是都将错误信息输出到stderr,0为不输出到stderr中
 *   optopt:不在选项字符串optstring中的选项
 * 
 * @选项字符串实例:
 *   “a:bd::”
 *     该字符串为一个选项字符串,其对应的命令就是-a, -b, -d。其中a后面是要必须跟一个参数,没有参
 *   数是会报错的,该参数可以和-a连在一起,也可以用空格隔开(-a123 or -a 123);b后面是不需要跟参
 *   数的;-d后面可以跟参数也可以不用跟参数,但需要注意有参数时,参数和选项之间不能有空格,否则认为
 *   无参数;
 *     总结:一个冒号表示后面必须跟一个参数,可以用空格或不用空格隔开选项和参数;两个冒号表示选项后
 *   面可以跟参数也可以不跟参数,若要跟参数,必须要和选项连在一起。
 */

2、代码实例

//GetOpt.cpp
#include <unistd.h>
#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
  int ret = -1;

  for(int i = 0; i < argc; ++i)
  {
    cout << argv[i] << " ";
  }
  cout << endl;

  extern char* optarg;
  extern int optind, opterr, optopt;
  /* *
   * @"t:h::f":
   *   选项-t:需要带一个参数
   *   选项-h:可以带参数也可以不带参数
   *   选项-f:不用带参数
   * */
  while(-1 != (ret = (getopt(argc, argv, "t:h::f"))))
  {
    switch(ret){
      case 'f':
        cout << "option: " << (char)ret  << endl;
        break;
      case 't':
        cout << "option: " << (char)ret << ", arg: " << optarg << endl;
        break;
      case 'h':
	    if(optarg)
          cout << "option: " << (char)ret << ", arg: " << optarg << endl;
        else
          cout << "option: " << (char)ret << ", not add param"<< endl;
        break;
      case '?':
        cout << "not has option: " << (char)optopt << endl;
        break;
    }
  }
  return 0;
}

编译

g++ GetOpt.cpp -o opt

执行说明

1、 ./opt -t 90 -h100 -f
	结果打印:
		option: t, arg: 90
		option: h, arg: 100
		option: f
2、./opt -t90 -h 100 -f
	结果打印:
		option: t, arg: 90
		option: h, not add param
		option: f
	说明: -h和参数100中间有空格,所以检测不到其后面的参数
	
3、./opt -t90 -h 100 -f -d 
	结果打印:
		option: t, arg: 90
		option: h, not add param
		option: f
		./opt: invalid option -- 'd'
		not has option: d
	说明: -d不在optstring选项中,故报错,认为是无效的选项
getopt.h和cpp 提供Linux下的getopt.h和cpp,可以放到windows下的vc直接编译通过 立即下载

相关推荐

getopt.h getopt.c getopt_long 文件和函数说明

getopt.h getopt.c getopt_long 函数说明

getopt.c 可在windows下分析命令行参数,没有实现getopt_long

来自Pete Wilson : Consultant Software Engineer, 可在windows下分析命令行参数,没有实现getopt_long,代码的参数风格有点老,不过确实管用,可以在VC6.0上编译通过和运行。 把这个两个文件加到工程,就可以实现命令行参数解析了,免得每次都要自己分析参数,痛苦死了。 getopt.h /* getopt.h */ /* De

victoryckl的专栏 2823

setoolkit克隆网站获取用户信息

一、环境 kali、DVWA 二、步骤 首先打开kali,输入setoolkit 依次选择选项1-选项2-选项3-选项2 输入钓鱼网站的网址(默认为本地网址) 输入要克隆的网址URL 这里我的网址如图,将网址复制 然后模拟攻击场景,攻击者向受害者发送了一条钓鱼链接,此链接与DVWA的登陆页面完全一样,受害者点击之后并进行登陆信息 点击login之后,用户信息就被setool...

BeatRex的博客 2997

C语言中getopt()函数的用法

1.getopt()函数 getopt函数用来解析命令行选项,声明所在头文件为: #include <unistd.h> 1 函数原型如下: int getopt(int argc, char * const argv[], const char *optstring); 1 第一个参数argc是参数个数,和main函数的argc一样; 第二个参数argv是字符串指针,和main函数的argv一样; 第三个参数 optstring 是选项字符串,是本文所要讲述的重点。 2. optst

modi000的博客 1961

windows10 + wsl2安装docker

一、安装wsl https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 1.1以管理员身份运行powershell 1.2执行如下命令 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 1.3重启电脑 1.4 重启电脑后,如果需要安装wsl2, 则安装官方文档继续后续操作,因我...

happytree001的博客 1568

从智能手机到汽车电子:聊聊IPC-9702/9704A标准如何帮我们搞定不同场景下的PCB可靠性设计

本文探讨了IPC-9702/9704A标准在智能手机和汽车电子等不同场景下的PCB可靠性设计应用。通过分析消费电子、汽车电子和工业设备中的应力特征,详细解读了IPC标准在应变识别和测试方法论中的核心价值,并提供了具体的轻量化设计策略和全生命周期验证方案,帮助工程师提升PCB的长期可靠性。

weixin_30693683的博客 279

别再自己写命令行解析了!手把手教你用C语言的getopt()函数搞定-a -b -c参数

本文详细介绍了如何使用C语言的getopt()函数高效解析命令行参数,避免手动解析的繁琐和错误。通过实例演示了如何定义选项规则、处理参数及错误,帮助开发者快速掌握这一POSIX标准库函数,提升命令行工具的开发效率。

weixin_42697475的博客 248

ArcMap投影变换避坑指南:为什么你的坐标转换总出错?常见问题解析与解决方案

本文深入解析ArcMap中坐标转换与投影变换的核心区别与常见陷阱。针对坐标转换总出错的问题,从混淆“定义投影”与“投影变换”、栅格数据重采样选择、矢量数据地理变换参数设置等关键环节,提供清晰的避坑指南与实战解决方案,帮助用户确保空间数据的精确匹配。

weixin_29210727的博客 356

C库函数-getopt函数总结学习

getopt函数是命令行参数解析函数。

Pretender_1205的博客 2880

差分运放实战:如何快速计算带直流偏置的电路(附详细推导步骤)

本文详细解析了差分运放电路在带直流偏置设计中的核心计算方法和实战技巧。通过可视化参数关系和分步拆解,帮助工程师快速掌握电路设计精髓,包括虚短虚断原理、偏置电压计算及非理想因素处理,提升信号调理和传感器接口设计的效率与精度。

o4p5q6r7s的博客 409

PaddleOCR 3.x 最新版使用教程(2025)——从安装到实战身份证识别,一步到位!

本文针对PaddleOCR 3.x大版本更新带来的参数变化和兼容性问题,提供从环境配置到实际应用的全流程解决方案。

qq_58607032的博客 9787

C语言getopt()函数的使用

getopt(分析命令行参数) 相关函数表头文件 #include<unistd.h> 定义函数 int getopt(int argc,char * const argv[ ],const char * optstring); 函数说明 getopt()用来分析命令行参数。参数argc和a...

weixin_34284188的博客 714

开源工具对比:5款主流大数据脱敏框架评测

数据脱敏(Data Masking/Anonymization),也称为数据漂白、数据去标识化,是指在不影响数据可用性的前提下,通过一定的技术手段对敏感信息进行处理,使其无法被识别或关联到具体个人或实体的过程。当应用程序向数据库写入数据(INSERT/UPDATE)时,ShardingSphere 会拦截 SQL,对配置了脱敏规则的字段,使用指定的算法进行加密/脱敏处理,然后将处理后的数据写入到。如果你的答案是“是”,那么数据脱敏,尤其是针对海量数据的。好的,各位技术同仁,数据安全领域的探索者们,大家好。

小程序开发 1184

用C解析命令行选项:getopt函数

本文介绍了C语言中解析命令行选项的getopt函数。getopt通过简化选项处理过程,提供了一种结构化方法来识别-或--开头的选项,支持带参数和不带参数的选项。文章详细解释了函数原型、使用方法和优势,包括代码示例演示如何处理-h、-v和-f filename等选项。此外,还简要提及了支持长选项的getopt_long函数,并提供了常见问题提示。通过getopt,开发者可以编写更简洁、可靠的命令行程序,提升代码可维护性。

always_TT的博客 512

YOLOv11模型改进:利用注意力机制实现小目标检测精度跃升

如果你在实操中遇到精度提升不明显或速度下降过多的问题,不妨尝试调整注意力模块的类型(如替换为CA)或插入层级,或针对性优化小目标的数据集增强策略。记住,小目标检测的核心是“特征强化与空间定位”,只要结合业务场景灵活调整注意力模块的组合,你也能让YOLOv11在小目标识别任务中脱颖而出。接下来,我们从模块选型到代码落地,一步步带你打造“小目标检测专精版”YOLOv11,真正帮你解决工业场景中(如安防、质检)的小目标识别痛点。在城市安防场景中,改进后的YOLOv11对远处行人、车辆(小目标)的识别准确率提升。

m0_71589036的博客 454

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C语言:va_xx、getopt_xx、str_xx等函数

在C语言学习过程中,有些函数并不会怎么见,但是在工作以后经常会见到和使用。今天在这里和大家简单介绍一下。

小嵌同学的博客 1206

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C语言解析命令行函数:getopt系列

头文件:/usr/include/getopt.h 函数传入较长参数 函数getopt_long_only和getopt_long两者用法差不多,都可以用来解析命令行选项 函数出处 #include <getopt.h> //getopt_long()头文件位置 int getopt_long (int ___argc, char *const *___argv, ...

天行健,地势坤 820

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

命令行选项解析函数(C语言):getopt()和getopt_long()

命令行选项解析函数(C语言):getopt()和getopt_long() 上午在看源码项目webbench时,刚开始就被一个似乎挺陌生函数getopt_long()给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的。于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序。在百度和man的帮助下,找到了具体使用方法和解释,二

肖邦学习之路点滴 4384

C语言:命令行选项解析函数(C语言):getopt()和getopt_long()

  平时在写程序时常常需要对命令行参数进行处理,因为参数少,自己解析就可以搞定;如果命令行个数比较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现,这个问题在 linux 中用 getopt 等函数可以优雅地解决。 一、查询linux命令手册: #include<unistd.h> #include<getopt.h> /*所在头文件 */ int getopt(intargc, char *

weixin_44498318的博客 771

C语言:命令行选项解析函数---getopt()和getopt_long()

上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的。于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序。在百度和 man 的帮助下,找到了具体使用方法和解释,二话不说赶紧学习一下,并总结出文档记录一下。 平时在写程序时常常需要...

houxiaoni01的博客 1325

命令行选项解析函数(C语言):getopt()、getopt_long()和getopt_long_only

转载:http://www.cnblogs.com/liwei0526vip/p/4873111.html上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的。于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序。在百度和 man

nmglwy的博客 476
上一篇: 图像常用的插值算法:最近邻插值、双线性插值和双三次插值算法
下一篇: 神经网络CNN之池化层
一杯盐水
博客等级 码龄10年 62粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值