实例讲解getopt()函数的使用

[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <unistd.h>  
  3.   
  4. int main(int argc, char *argv[]) {  
  5.     extern char *optarg;//保存选项的参数  
  6.     extern int optind, opterr, optopt;  
  7.     int ch;  
  8.   
  9.     printf("\n\n");  
  10.     printf("otperr:%d\n", opterr);//是否将错误信息输出到stderr,为0时表示不输出  
  11.     printf("optind:%d\n", optind);//记录下一个检索位置  
  12.     printf(">>>>>>>>>>>>>>>>>>>>>\n");  
  13.     opterr = 1;  
  14.     while ((ch = getopt(argc, argv, "a:b::cde")) != -1) {//当a没有传入参数时,会执行case '?':  
  15.     //while ((ch = getopt(argc, argv, ":a:b::cde")) != -1) {//当a没有传入参数时,会执行case ':':  
  16.         printf("optind:%d\n", optind);  
  17.         printf("optarg:%s\n", optarg);  
  18.         printf("ch:%c\n", ch);  
  19.         switch (ch) {  
  20.         case 'a':  
  21.             printf("option a: '%s'\n", optarg);  
  22.             break;  
  23.         case 'b':  
  24.             printf("option b: '%s'\n", optarg);  
  25.             break;  
  26.         case 'c':  
  27.             printf("option c\n");  
  28.             break;  
  29.         case 'd':  
  30.             printf("option d\n");  
  31.             break;  
  32.         case 'e':  
  33.             printf("option e\n");  
  34.             break;  
  35.         case ':':  
  36.             printf("option lost...\n");  
  37.             break;  
  38.         case '?':  
  39.             printf("unknow option :%c\n", ch);  
  40.         }  
  41.     }  
  42.     printf("optopt +%c\n", optopt);//不在选项字符串optstring中的选项。找不到参数的case '?'和缺少选项的case ':'的选项  
  43. }  


函数说明:
[cpp] view plaincopy
  1. #include <unistd.h>  
  2. extern char *optarg;  
  3. extern int optind, opterr, optopt;  
  4. int getopt(int argc, char * const argv[], const char *optstring);  

optarg:选项的参数指针

optind:记录下一个检索位置,在getopt的执行中,每次进入都会更新optind变量,该变量指向下一个argv参数

opterr:是否将错误信息输出到stderr,为0时表示不输出

optopt:当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回'?’

optstring说明:

"a:b::cde",这就是一个选项字符串。对应到命令行就是-a ,-b ,-c ,-d, -e 。冒号又是什么呢? 冒号表示参数,一个冒号就表示这个选项后面必须带有参数,如果optstring中指定了option需要参数,但在命令行没有参数,那么getopt将返回'?',如果在optstring的第一个字符(或者在第一个字符是+/-之后)是':',那么将返回':',这个参数可以和选项连在一起写,也可以用空格隔开,比如-a123 和-a   123(中间有空格) 都表示123是-a的参数;两个冒号的就表示这个选项的参数是可选的,即可以有参数,也可以没有参数,若有参数,optarg指向该该参数,否则optarg为NULL,但要注意有参数时,参数与选项之间不能有空格(有空格会报错),这一点和一个冒号时是有区别的。


传入的'-'开始的字符被解析为选项,getopt一次执行解析出一个option,如果循环执行,可以将argv中的全部option解析出来,如getopt返回-1,表示argv[]中的所有选项被解析出。

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

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

相关文章

机器学习实战 | SKLearn最全应用指南

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 作者&#xff1a;韩信子ShowMeAI 教程地址&#xff1a;http://www.showmeai.tech/tutorials/41 本文地址&#xff1a;http…

windows 64位 安装mvn提示 不是内部或外部命令

在安装mvn的过程中当在mvn的目录下去执行mvn命令的时候是可以正常执行的&#xff0c;当设置好环境变量后执行后发现提示mvn不是内部命令。 原因是设置的MAVEN_HOME变量未被Path解析&#xff0c;解决办法是 直接把path中的%MAVEN_HOME%\bin 换成MAVEN_HOME的绝对路径&#xff0c…

Scheme语言入门

2019独角兽企业重金招聘Python工程师标准>>> Scheme语言入门 最早听说 LISP&#xff0c;是 Stallman 的 GNU Emacs 中将 LISP 作为嵌入语言&#xff0c;定制和增强 Emacs。GNU Emacs 是一个文本编辑器&#xff0c;文本就是一种符号&#xff0c;而 Lisp 正好就是针对…

题目四 艺术品

Dr.Kong设计了一件艺术品&#xff0c;该艺术品由N个构件堆叠而成&#xff0c;N个构件从高到低按层编号依次为1&#xff0c;2&#xff0c;……,N。艺术品展出后&#xff0c;引起了强烈的反映。Dr.Kong观察到&#xff0c;人们尤其对作品的高端部分评价甚多。 狂热的Dr.Kong一激动…

如何将docker 镜像上传到docker hub仓库

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 如何将docker 镜像上传到docker hub仓库 目录* 如何将docker 镜像上传到docker hub仓库 背景 1.注册docker hub账号 2.…

C# 类(14) 事件

using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication1 {//先在外面定义一个类.class MyClass{//委托是事件的前提,所以先定义一个委托public delegate void Mydelagate(int i);// 接着定义事件. public event…

ThinkPHP框架 _ 学习3

【路由解析】 通过url地址get参数找到指定的控制器&#xff0c;并进行对应方法调用请求 http://网址/index.php?m模块名称&c控制器&a方法 以上url地址信息代码不够优雅、不安全。 tp框架url地址可以由以下四种 http://网址/index.php?mXX&cXX&aXX 基本get模…

The slave I/O thread stops(equal MySQL server ids)

在学习replication时遇到了如下问题&#xff1a;显然看到Slave_IO_Running 为NO 表示有问题&#xff1b;到日志里查看&#xff0c;错误如下&#xff1a;position 98100121 17:09:03 [ERROR] The slave I/O thread stops because master and slave have equal MySQL server ids;…

pytest配置文件pytest.ini

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 说明&#xff1a; pytest.ini是pytest的全局配置文件&#xff0c;一般放在项目的根目录下是一个固定的文件-pytest.ini可以…

函数声明、引用

1.函数的声明 function 函数名(形参1&#xff0c;形参2&#xff0c;形参3....){ 函数体&#xff1b; return; } 2.函数的调用方式&#xff1a; func(1,2,3); 函数名(参数1&#xff0c;参数2&#xff0c;参数3); 3.return:&#xff0c;并返回一个函…

基于积分墙盈利模式的APP架构思考

基于积分墙盈利模式的APP架构思考from: http://kuailiyu.cyzone.cn/article/4156.html个人感言&#xff1a;一款小游戏好不容易辛辛苦苦开发出来&#xff0c;但是在后期如何不注重推荐&#xff0c;其下场可想而知。而个人游戏开发者的产品很难实现应用内付费集成&#xff0c;技…

flash中的渐变滤镜GradientGlowFilter

可使用 GradientGlowFilter 类对显示对象应用渐变发光效果。 渐变发光是一种非常逼真的发光效果&#xff0c;您可以控制颜色渐变。 可以在对象的内缘或外缘的周围或者对象的顶部应用渐变发光。 您可以将滤镜应用于任何显示对象&#xff08;即&#xff0c;从 DisplayObject 类继…

【死磕NIO】— 探索 SocketChannel 的核心原理

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 大家好&#xff0c;我是大明哥&#xff0c;一个专注于【死磕 Java】系列创作的程序员。 【死磕 Java 】系列为作者「chenssy…

RSync实现文件备份同步

转自&#xff1a;http://www.mike.org.cn/blog/index.php?loadread&id639###pp0 [rsync实现网站的备份&#xff0c;文件的同步&#xff0c;不同系统的文件的同步&#xff0c;如果是windows的话&#xff0c;需要windows版本cwrsync] 一、什么是rsync rsync&#xff0c;remo…

session的存储方式

1、保存在IIS进程中 2、保存在StateServer上 3、保存在SQL Server数据库中 转载于:https://www.cnblogs.com/dashi/archive/2012/10/10/4034799.html

PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎

Pixi.js 是一个开源的HTML5 2D 渲染引擎&#xff0c;使用 WebGL 实现&#xff0c;不支持的浏览器会自动降低到 Canvas 实现。PixiJS 的目标是提供一个快速且轻量级的2D库&#xff0c;并能兼容所有设备。此外&#xff0c;让开发者无需了解WebGL&#xff0c;就可以感受到硬件加速…

腾讯的老照片修复算法,我把它搬到网上,随便玩

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 大家好&#xff0c;之前向大家介绍并跑通了腾讯开源的老照片修复算法&#xff08;AI 黑科技&#xff0c;老照片修复&#xf…

linux下查看文件及目录个数

linux下查看文件及目录个数1、查看当前文件和目录总数&#xff08;不包括子目录&#xff09;&#xff1a;ls -l | wc -l 2、查看当前目录下文件个数(不包括子目录)&#xff1a;ls -l |grep "^-"|wc -l 查看当前目录下文件个数(包括子目录)ls -lR |grep "^d"…

java的事务类型及定义

转载:什么是事务:首先,说说什么事务。我认为事务&#xff0c;就是一组操作数据库的动作集合。事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行&#xff0c;我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行&#x…

驱动开发 环境搭建(VS2008+WDK+DDKWzard)

这篇文章比较适合初学驱动&#xff0c;搭建一个自动化的环境对于开发来说是事半功倍啊&#xff1b; 开发驱动&#xff0c;首先就是搭建开发的环境。既然是开发windows下的驱动程序&#xff0c;那MS的开发工具是一定要的。现在vs都到2010了&#xff0c;所以&#xff0c;也不能总…