getopt()简介

函数getopt()用来分析命令行参数,其函数原型和相关变量声明如下:

#include
extern char *optarg;
extern int optind,  // 初始化值为1,下一次调用getopt时,从optind存储的位置重新开始检查选项,也就是从下一个'-'的选项开始。
extern int opterr,  // 初始化值为1,当opterr=0时,getopt不向stderr输出错误信息。
extern int optopt;  // 当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回’?’。

int getopt(int argc, char * const argv[], const char *optstring);

optarg和optind是两个最重要的external                                                                                             
变量。optarg是指向参数的指针(当然这只针对有参数的选项);optind是argv[]数组的索引,众所周知,argv[0]是函数名称,所有参数从argv[1]
开始,所以optind被初始化设置指为1。 每调用一次getopt()函数,返回一个选项,如果该选项有参数,则optarg指向该参数。                 
在命令行选项参数再也检查不到optstring中包含的选项时,返回-1。

函数getopt()有三个参数,argc和argv[]应该不需要多说,下面说一下字符串optstring,它是作为选项的字符串的列表。

函数getopt()认为optstring中,以'-                                                                                                
’开头的字符(注意!不是字符串!!)就是命令行参数选项,有的参数选项后面可以跟参数值。optstring中的格式规范如下:
1) 单个字符,表示选项,
2) 单个字符后接一个冒号”:”,表示该选项后必须跟一个参数值。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3) 单个字符后跟两个冒号”:”,表示该选项后必须跟一个参数。                                                                       
参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩展)。

 

#include #include int main(int argc,char *argv[]) { int ch; opterr=0; while((ch=getopt(argc,argv,"a:b::cde"))!=-1) { printf("/n/n/n"); printf("optind:%d/n",optind); printf("optarg:%s/n",optarg); printf("ch:%c/n",ch); switch(ch) { case 'a': printf("option a:'%s'/n",optarg); break; case 'b': printf("option b:'%s'/n",optarg); break; case 'c': printf("option c/n"); break; case 'd': printf("option d/n"); break; case 'e': printf("option e/n"); break; default: printf("other option:%c/n",ch); } printf("optopt+%c/n",optopt); } }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

re管理器Java_自定义布局管理器-FormLayout

第二部分:自定义布局管理器在java.awt包与javax.swing包下有许多现成的布局类,比如BorderLayout、FlowLayout,还有较为复杂的、用于精确定位的布局类GridBagLayout、SpringLayout等。起初我刚刚从事gooey时(06年中),企图依靠JDK自…

如何看待 70% 的程序员,缺乏数据结构和算法知识?

金三银四来了,各大厂动静不小,都在储备人才,绝对是程序员面试的黄金时间了,不少同学也在后台反馈面试中遇到的一些问题,所以今天想跟大家说说算法。说起算法,那大厂面试是绝对必考的,可以说是一…

Sorry,关注这些 IT 技术类公众号,真的可以为所欲为

工作和生活节奏超快的今天,想要不断提升自我,碎片化阅读学习是你最佳的选择,如果你已经有了一颗学习的心,却苦于不知道从哪里学习,那么,这些学习的工具和途径就很重要了。今天为你推荐一些 IT技术领域的微信…

理解T-SQL:高级查询

1. 子查询 子查询是嵌套在其它查询中常规的SQL查询,当需要一个Select语句作为数据部分的基础或另一个查询中的条件的要素时,就是创建子查询 子查询经常满足下列几种需求: a. 把一个查询分解成一系列的逻辑步骤 b. 提供一个列表作为wh…

java hdms_字段为clob类型,无法插入数据

public String getHdmsStr() throws SQLException, IOException {if(this.hdms!null){Reader is hdms.getCharacterStream();BufferedReader br new BufferedReader(is);String s br.readLine();StringBuffer sb new StringBuffer();while (s ! null) {// 执行循环将字符串…

谈谈低代码趋势和开发人员的未来

最近的低代码平台很火,不光是大厂在扎堆研发,也有很多创业企业在做,大量的资金投入到这个领域,虽然在软件行业,一直是有这个梦想(就是让所有人都可以编程),但忽如一夜春风来&#xf…

java跨库调用存储_存储库仅在第二个调用数据时发送回ViewModel

问题:My Fragment仅在第二次调用时获取数据(例如,当我旋转屏幕时) .在我看来,这些代码行是repo类中的问题:public class UserRepository {private Webservice webservice;// ...public LiveData getUser(int userId) {// This isn…

数据告诉你,抖音是如何在半年之内逆袭的

从春节至今,音乐短视频社区“抖音”在苹果应用商店免费排行榜上连续多天霸榜。凭借多元的音乐风格、酷炫的视觉编辑功能、个性化的分发机制以及良好的社区氛围,抖音在上线不久后便受到了年轻用户的追捧。在这一年半的时间里,抖音到底成长到了…

你是哪种职场性格?

俗话说,性格决定一切。虽然有些言过其实,但在如今的职场上,个人的“职场性格”因素的确非常重要,它决定着你的职场表现,影响着上司对你的看法,左右着你的职业发展。因此,了解自己的“职场性格”…

非名校出身的我,是如何拿到Facebook、谷歌、微软、亚马逊和Twitter的Offer的?

非名校出身,也没有知名科技公司的工作经验,他竟同时拿到了美国5家顶尖科技公司的Offer。他究竟是如何做到的?这篇文章是专门为那些即将开始找工作的人写的。很多正在找工作的人可能会担心因为自己不是毕业于常青藤名校而无法在顶尖科技公司找…

GitLab 服务器的迁移以及注意点

Git 已经是代码托管工具中的主流了,如果是自己搭建私有的 Git 服务器我们一般会使用 GitLab ,在《在CentOS7中安装GitLab》 一文中有介绍怎样在 CentOS7 中安装 GitLab 。文本主要介绍怎样迁移 GtiLab 。环境CentOS:7.4GitLab:10.…

java 根据客户端重定向_JavaWeb【1.4HttpServletResponse类、重定向】

HttpServletResponse类、重定向Tomcat服务器每次接收到一个请求都会和HttpServletRequest类一样创建一个HttpServletResponse对象,用来设置给客户端回传的响应信息1.以流的形式向客户端传输数据public class Web06 extends HttpServlet {Overrideprotected void doG…

RHEL5下DNS配置详解3

view 是bind中的另外的一个技巧他在有防火墙的环境中非常有用。View允许你呈现出不同的配置文件给不同的客户,当你的服务器既要给内网的用户又要给外网的用户提供查询服务时使用view将是非常方便的。下其实访问控制列表就是一个有名字的地址匹配列表。它的语法格式为…

百叶窗效果显示图片源码(c#)

2019独角兽企业重金招聘Python工程师标准>>> 显示图片: this.pictureBox.Image Image.FromFile("image.jpg", false); 百叶窗有两种显示效果,一种是垂直百叶窗,另一种是水平百叶窗。 实现百叶窗显示图像有两种方式&…

16个顶级思维模型

思维模型会给你提供一种视角或思维框架,从而决定你观察事物和看待世界的视角。顶级的思维模型能提高你成功的可能性,并帮你避免失败。打造多元思维模型想法来自查理芒格,而查理芒格是沃伦巴菲特的得力助手。Farnam Street曾这样描述思维模型&…

使用BeetleX网关对Web应用进行灰度发布

灰度发布可以更有效地保障服务运作的可靠性,即能让服务得以更新的同时也不影响业务动作。BeetleX网关支持全动态化实时配置,对应用进行灰度发布可以说是非常便利。灰度发布在BeetleX网关中涉及到以下:添加新应用服务,测试路由配置&#xff0c…

SqlException (0x80131904): 将截断字符串或二进制数据。

今天在调试对SQL库的添加时出现了这样的错误: Error! [8152]System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。语句已终止。 at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Sand.WebForm2.Page_Load(Object sender, EventArgs e) in \\…

17道因为太难而被禁用的Google面试题

即使是最成功的公司,它的招聘过程有时也会很不靠谱,经常会出一些奇怪的看似没有答案的面试问题,但标准答案却让应聘者还没来得及接近「起跑线」就被「退赛」了。Google 曾经就是这样的公司,招聘人员会出一些难为应聘者的高质量问题…

在 .NET Core 中构建 REST API

翻译自 Camilo Reyes 2020年8月26日的文章 《Build a REST API in .NET Core》 [1]REST API 可以使用简单的动词(如 POST、PUT、PATCH 等)将大型解决方案背后的复杂性隐藏起来。在本文中,Camilo Reyes 解释了如何在 .NET Core 中创建 REST AP…

java疯狂讲义内存分配_java疯狂讲义学习:面向对象(上)

5.7.2编写java程序时,引用变量只能调用它编译时类型的方法,不能调用它运行时类型的方法。理解:引用变量只能调用引用变量类型中的方法,不能调用引用变量实际指向对象中“额外”的方法。import static java.lang.System.out;/*** a…