解析main()函数的参数-----getopt()

C/C++编程笔记:main()函数的两个参数是怎么传递的? C语言程序的入口函数默认是 main() 函数,它的一个C语言标准原型是下面这样的: intmain(intargc,char*argv[]); main() 函数的两个参数允许用户执行应用程序时指定参数。编写 myprint() 函数打印 main() 函数接收到的参数,并在 main() 函数中调用,相关C语言代码如下: voidmyprint(intargc,char*argv[]){inti;for(i=0; i 编译这段C语言代码,可得到可执行文件,在执行时指定参数,可以得到如下输出: 阅读详情
#include <unistd.h>
int getopt(int argc, char * const argv[],const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
描述:该函数用于解析命令行参数。
    如果argv的一个元素以'-'(且不是'-'或'--')开头,那么这个元素的'-'字符之后的字符表示一个选项。如果重复调用该函数,将会依次返回argv中所找到的选项。optind,它指向argv列表中下一个需要被解析的元素的位置,系统将它初始化为1,调用者可以通过重新扫描相同的argv列表来将它设置为1,或者扫描新的argv列表。
    如果该函数找到了选项字符,它会返回这个字符,然后更新optind和一个静态可变参数nextchar,所以继续调用该函数时,都会返回选项或者下一个argv元素。
    如果后续没有选项参数了,该函数返回-1,然后optind会指向argv中第一个不是选项的元素。
    opttring是一个由合理的选项字符组成的字符串。如果其中有字符后跟着冒号,则说明这个选项请求一个参数,所以该函数会将这个选项所在元素的后续字符串或者紧随其后的元素的地址放到optarg中,作为这个选项的参数。如果后面跟着两个冒号,说明请求一个可选参数,如果该选项后跟有参数,则放入optarg中,如果没有,optarg被置空(eg. -oarg arg是o选项的参数)。如果optstring中带有W,并以分号结尾,那么-W foo将被视为长选项 --foo
    默认情况下,该函数会将所有扫描的选项排序,不是选项的参数作为结尾。并且这个函数支持了两种模式:选项的第一个字符是‘+’或者环境变量POSIXLY_CORRECT被设置的情况下,则检查到最近的非选项参数直接退出。如果第一个字符是'-',每个非选项元素作为一个代码为1的选项的参数。如果一道'--'将会强制结束扫描
    在检查参数选项列表argv时,该函数可以检查出两种错误:
        1)一个不存在于optstring中的选项;
        2)一个缺失参数的选项。
    这两种情况下会有以下行为:
        1)默认情况下,该函数在标准错误输出上打印错误信息,将错误的选项字符放置到optopt中,然后在函数结束的时候,返回'?'
        2)如果调用者设置过全局变量opterr为0,该函数将不会打印错误信息,调用者可以通过opterr决定函数结束时返回的字符信息
        3)如果optstring的第一个字符是':',该函数不会打印错误信息,会返回':'表示选项缺少参数,可以来区分两种不同的错误。
参数:
    int argc:它的argc参数是argv列表中包含的参数的计数,就像是main函数在工程中被调用。
    char *const argv[]:参数列表。
    const char *optstring:指定了需要检查的选项字符
  返回值:
        成功,则返回解析的选项字符
        如果全部解析完毕,则返回-1
        如果遇到一个不是optstring中指定的选项,则会返回?
        如果遇到一个缺少参数的选项,要根据optstring中第一个字符来决定返回什么,第一个字符为:,就返回:,其它情况都返回?

函数测试代码如下:

#include <iostream>
#include <unistd.h>
using namespace std;
int main(int argc,char *argv[]){
        char ch = 0;
        while(-1 != (ch = getopt(argc,argv,":a:bc"))){
                cout << ch << endl;
        }
        return 0;
}
weblogic 集群搭建,双机部署,相关问题记录 4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ... 阅读详情

相关推荐

Frida提取Cocos游戏XXTEA密钥的实战方法论

XXTEA是一种轻量级分组加密算法,广泛用于移动端游戏通信保护;其128位密钥的安全性直接决定网络协议逆向成败。在Cocos引擎生态中,密钥常以静态常量、JNI动态传递或Native运行时派生三种形态存在,导致传统静态分析失效。Frida凭借跨Java/Native注入能力与内存实时观测优势,成为捕获密钥‘出生瞬间’的关键工具——尤其适用于hook xxtea_encrypt函数入口、监控JNI参数传递、设置内存断点追踪派生过程等场景。本文聚焦Cocos2d-x与Cocos Creator项目,覆盖从密钥识

weixin_33509600的博客 416

YOLO v5 代码精读(1) detect模块以及非极大值抑制

YOLO 是目前最先进的目标检测模型之一,现在博客上常有的是如何使用YOLO模型训练自己的数据集,而鲜有对YOLO代码的精读。我认为只有对算法和代码实现有全面的了解,才能将YOLO使用的更加得心应手。这里的代码精读为YOLO v5,github版本为6.0。版本不同代码也会有所不同,请结合源码阅读本文。本文使用注释完成对每行代码的解读,文段来概括总结每个代码段。yolo v5代码 6.0版本 github代码地址。

qq_63708623的博客 7806

《网络安全自学教程》- MySQL脱库原理和步骤

MySQL脱库,脱库的原理,怎么脱库,脱库的步骤,一库三表六字段

wangyuxiang946的博客 1万+

yolov5模型修改报错

yolov5模型修改

生活如此美好,致敬每一个热爱“热爱”的人! 3260

Python实现PDB文件预处理

蛋白质结构研究依赖PDB文件存储的三维结构数据,但原始文件常含无关的水分子、离子和非标准残基等干扰信息。本文介绍了一个基于BioPython的Python预处理脚本,可自动清理PDB文件,主要功能包括:1)移除短于阈值的蛋白质链;2)过滤非标准氨基酸;3)可选保留水分子和金属离子。该脚本逻辑清晰,支持批量处理,能显著提升结构比对、分子对接等分析前的数据准备效率,为后续生物信息学研究提供更纯净的结构数据基础。

Protein Designer的博客 568

游戏大厂射击游戏无缝大世界游戏DS服务器架构设计方案详解

摘要: 本文深入解析游戏大厂无缝大世界射击游戏的分布式服务器(DS)架构设计方案。以《和平精英》《量子特攻》为例,阐述如何通过动态分区、兴趣管理、弹性扩缩等核心技术应对高并发、低延迟、无缝切换等挑战。架构分为世界协调层、分区计算层、物理判定层等模块,结合微服务化、快照同步和Kubernetes调度,实现玩家跨区无感知迁移与一致判定。重点优化动态负载均衡、状态同步算法及容灾备份,依托分布式数据库与多云部署保障高可用性,为同类游戏提供可扩展的技术范本。(149字) 关键词: 无缝大世界、分布式服务器、动态分区、

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 563

YOLO v5 代码精读(2)train模块

精读了YOLO v5 6.0版本的detect模块,这篇博客来精读train模块。

qq_63708623的博客 4123

点云语义分割:RandLANet模型推理C++部署(2)

一、数据读取及预处理 二、模型推理 三、结果保存

zhaoguanhua的博客 3798

YoloV5源码注释解读(ultralytics版本)(detect.py)

YoloV5源码注释解读(ultralytics版本)(detect.py)

qq_43234191的博客 1607

MicroCap声学仿真介绍(二)-创建声学仿真元件

声学库里包含孔、管、障板辐射器等器件,我们只需要按照仿真的需求,将声学库里的器件排列好,输入参数,用线连接起来即可。这里我们用D指代孔的直径,L指代孔的长度,N代表孔的数量。26.在弹出的界面中做如下设置:需要先在右面的选框里找到对应的项,然后右键Add Part,再之后就如下设置。3.在弹出的界面中,选择“Macro file(.mac)”,并点击右上角的“OK”下面就以声学仿真中常见的“孔”来做示例,跟大家一块演示一下宏程序的新建。10.在上图中“Value”中填入“R”,然后点击左边的“OK”按钮;

山无忧的博客 2199

YOLOv8独家原创改进:原创自研 | 创新自研CPMS注意力,多尺度通道注意力具+多尺度深度可分离卷积空间注意力,全面升级CBAM

自研CPMS,多尺度通道注意力具+多尺度深度可分离卷积空间注意力,全面升级CBAM

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 3797

YOLOv5代码解析——train.py

Checks# 输出所有训练参数# 检查代码版本是否更新# 检查所需要的包是否都安装了。

yrhzmu的博客 2706

Y-Branch and a closed y-branch loop

双臂后面的区域,我们将它的双臂使用一个波导进行了连接,使得它本身形成了一个闭合回路,因此,该结构被称作。它们均是用来对经过它们的光束能量进行分割的一种器件。首先,我们知道一点,在光波导层面,今天给大家介绍一下,什么是。

u011699626的博客 630

C语言中getopt()函数

在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如: ./a.out -a1234 -b432 -c -d 程序会根据读取的参数执行相应的操作,在C语言中,这个功能一般是靠getopt()这个函数,结合switch语句来完成的,首先来看下面的代码: #include #include int main(int argc,ch

come on! 1131

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【main参数】main函数的参数|命令行参数

转载自:http://www.cnblogs.com/zerocc/archive/2010/12/17/1909642.html 第一个带参数的main。 #include int main(int argc,char *argv[]) { for(inti=0;i) { cout&...

我的笔记本 3661

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TinyWebserver学习记录(3)-主程序

这个大家自己去看吧,这个类的定义还是比较简单的,主要定义了一个初始化的函数,然后就是各个具体功能是实现函数了,在具体的实现函数里面,就会调用定义的其他的类了,以log_write()这个为例,他的逻辑也很简单,根据我们输入的参数来决定是否开启日志功能,开启后采用同步日志还是异步日志,可以看出调用了Log这个类,接下来我们具体来学习一下Log日志功能的实现。//初始化日志,默认不关闭,同步if (1 == m_log_write) //如果为1,则异步;如果为0,则同步else。

xiangerersheng的博客 296

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C/C++编程:命令行参数

每个 C 语言程序都必须有一个称为 main()的函数,作为程序启动的起点。当执行程序时, 命令行参数(command-line argument)(由 shell 逐一解析)通过两个入参提供给 main()函数。 int main(int argc, char *argv[]); 第一个参数 int argc,表示命令行参数的个数。 第二个参数 char *argv[],是一个指向命令行参数的指针数组: 每一参数又都是以空字符(null)结尾的字符串。 首个字符串 argv[0],标识程序名本身 a

OceanStar的博客 7632

C语言入门:命令行参数

C语言入门:命令行参数

weixin_68551689的博客 214

一生一芯PA实验nemu源码导读

这篇文章是我在做完后发现有一些对代码的遗忘,和之前知识的遗忘而写的,由于本人技术有限,所以欢迎纠错!!!

hao15635113778的博客 2315

linux 变量 获取时间,Linux环境-程序参数&环境变量&时间和日期

main函数原型int main(int argc, char *argv)参数由上一级的程序调用传入,一般是shell,注意,Linux的shell一般会在设置argc和argv之前对文件名参数进行通配符拓展,而MS-DOS的shell则希望程序接受带通配符的参数,并执行自己的通配符。通配符只有*,?,[],{}这4种argv[]数组,程序名也作为参数,argv[0]就是程序名命令行参数约定0....

weixin_39638188的博客 531

getopt()

标题GETOPT() 头文件: #include <unistd.h> 函数: int getopt(int argc ,char * const argv [] ,const char * optstring ); extern char * optarg ; extern int optind ,opterr ,optopt ; getopt()函数解析命令行参数。其参数argc和argv是main 函数的参数计数和参数队列。如果重复调用getopt(),它将依次从每个选项元素中返回每个选项

weixin_43117602的博客 288

【高级操作系统】Chapter 7 Unix 进程环境

Unix进程环境

py今天刷题了吗 128

C语言知识扫盲

语法结构:

weixin_45510561的博客 513

C/C++编程: Google命令行工具gflags使用

使用flags需要包含头文件 #includegflags主要支持的参数类型包括bool,int32, int64, uint64, double, string等,定义参数通过DEFINE_type宏实现,如下所示,分别定义了一个bool和一个string类型的参数,该宏的三个参数含义分别为命令行参数名,参数默认值,以及参数的帮助信息。gflag不支持列表,用户通过灵活借助string参数实现,比如上述的languages参数,可以类型为string,但可看作是以逗号分割的参数列表。

OceanStar的博客 1576

使用 getopt() 、getopt_long()、getopt_long_only()进行命令行处理

简介: 所有 UNIX® 程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。不过很多开发人员都将其宝贵的时间花在了编写自己的命令行解析器,却不使用 getopt(),而后者是一个专门设计来减轻命令行处理负担的

niepangu的专栏 364

【转载】原来命令行参数处理可以这么写-getopt?

  经常要写点Linux下命令行的测试程序,都需要对命令行参数做一些处理,以前都是自己来写参数的处理,不只每次写的都不一样,而且每次还浪费时间去做参数的判断,而且写出来的代码很难看,最近在看老大写的一个测试程序,发觉里面用到了getopt或getopt_long这个函数来处理,不只代码清晰,而且非常容易的就能实现人们常用的那种短横线带参数的命令行参数处理模式,在网上查了一些资料,发现介绍还是很多,...

BLOCKGOLD.E的博客 207
上一篇: 为进程创建新会话-----setsid()-举例,精灵进程
下一篇: 学习笔记day64-----oracle-sql标准的表连接、集合运算、函数和分组、子查询、表操作
displayMessage
博客等级 码龄11年 34粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值