首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++中getopt函数的混淆

C++中getopt函数的混淆
EN

Stack Overflow用户
提问于 2020-04-06 14:41:55
回答 1查看 258关注 0票数 0

我用getopt函数写了一个代码,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<ctype.h>

int main(int argc, char *argv[]){
    int result;
    opterr=0;
    puts("The following parsed outcome to command-line argments by getopt(-a, -b* or -c*):");
    while((result=getopt(argc, argv, "ab:c::"))!=-1){
        switch(result){
        case ':':
            printf("getopt returns \'%c\'\toptopt=%c\toptarg=%s\toptind=%d\t", result, optopt, optarg, optind);
            break;
        case '?':
            if(optopt=='b')
                fprintf(stderr, "Option -%c requires an argument attached. optarg=%s\toptind=%d\t", optopt, optarg, optind);
            else if(isprint(optopt))
                fprintf(stderr, "Unknown option \'%c\'.\toptarg=%s\toptind=%d\t", optopt, optarg, optind);
            else
                fprintf(stderr, "Unknown option character \'%x\'.\toptarg=%s\toptind=%d\t", optopt, optarg, optind);
            break;
        default:
            printf("getopt returns \'%c\'\toptarg=%s\toptind=%d\t", result, optarg, optind);
            break;
        }
        printf("argv[%d]=%s\n", optind, argv[optind]);}

    puts("Here is parsed argument values:");
    for(result=1; result<argc; result++)
        printf("argv[%d]=%s\n", result, argv[result]);
    for(; optind<argc; optind++)
        printf("No-option argument values: argv[%d]=%s\n", optind, argv[optind]);
    return 0;
}

然后将上面的程序编译成可执行文件parse。使用以下命令行参数运行parse:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./parse -ac b

下面是输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  The following parsed outcome to command-line argments by getopt:
  getopt returns 'a'      optarg=(null)   optind=1        argv[1]=-ac
  getopt returns 'c'      optarg=(null)   optind=2        argv[2]=b
  Here is parsed argument values:
  argv[1]=-ac
  argv[2]=b
  No-option argument values: argv[2]=b

我感到困惑的是,为什么getoptargv[1] ac中遇到c时会返回c。因为那不是-c。在我看来,它应该执行语句case '?':

EN

回答 1

Stack Overflow用户

发布于 2020-04-06 14:54:52

使用getopt时,不带参数的单字符选项可以与以下选项组合使用。这就是为什么可以输入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls -lR

即使下面的选项带有参数,这也是有效的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61062364

复制
相关文章
getopt函数[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131836.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/01
4160
Python中的 getopt模块
python 的 getopt 模块是一个简单实用的命令行参数解析模块。实现命令解析功能的为模块中的getopt 方法。下面主要介绍一下这个getopt方法的使用。
py3study
2020/01/07
9190
getopt在Python中的使用
在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为”-“加上单个字母选项;长选项为”–“加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。
全栈程序员站长
2022/08/13
6.8K0
Python getopt模块函数用法小
官方模块说明:https://docs.python.org/2/library/getopt.html#module-getopt
py3study
2020/01/09
7800
C语言中getopt()函数的用法[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135394.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/18
3.1K0
C语言中getopt()函数的用法[通俗易懂]
python getopt方法_python的getopt
所有UNIX程序甚至那些具有图形用户界面(Graphical User Interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更好用。
全栈程序员站长
2022/09/06
6790
命令行參数选项处理:getopt()及getopt_long()函数使用
在执行某个程序的时候,我们通常使用命令行參数来进行配置其行为。 命令行选项和參数控制 UNIX 程序,告知它们怎样动作。
全栈程序员站长
2022/07/07
5910
命令行參数选项处理:getopt()及getopt_long()函数使用
c++中的pow()函数
定义: #include <math.h> double pow( double base, double exp ); The pow() function returns base raised to the expth power. There’s a domain error if base is zero and exp is less than or equal to zero. There’s also a domain error if base is negative and exp is not an integer. There’s a range error if an overflow occurs.
用户7886150
2021/02/04
1.8K0
C++中的exec()函数
exec()函数在C++中是一个进程控制函数,用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程的代码和数据,创建新的进程运行其他程序。exec()函数有多个版本,例如execl、execv、execle、execve等,根据不同的参数类型和个数来使用。
芯动大师
2023/10/14
3650
C++中的exec()函数
getopt解析
转载自http://www.cnitblog.com/zouzheng/archive/2007/04/02/25034.aspx
全栈程序员站长
2022/08/15
6960
JS 中的函数表达式和函数声明你混淆了吗?
在 JavaScript 中,function关键字可以完成一个简单的工作:创建一个函数。 但是,使用关键字定义函数的方式可以创建具有不同属性的函数。
前端小智@大迁世界
2022/06/15
7520
C++ 中的函数对象(仿函数)的使用
函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。即重载函数调用操作符的类,其对象通常称为函数对象。函数对象使用重载()时,行为类似函数调用,因此也叫仿函数。
耕耘实录
2022/05/09
2K0
getopt()、getopt_long()与getopt_long_only()获取命令行参数
众所周知,C/C++程序的主函数有两个参数。第一个参数是整型,可以获得包括程序名字的参数个数,第二个参数是字符数组指针或字符指针的指针,可以按顺序获得命令行上各个字符串参数。其原形是:
恋喵大鲤鱼
2018/08/03
4.4K0
C++中substr函数的用法
#include<string> #include<iostream> using namespace std; int main() {   string s("12345asdf");   string a = s.substr(0,5); //获得字符串s中从第0位开始的长度为5的字符串   cout << a << endl; } 输出结果为:12345 【更多】 用途:一种构造string的方法 形式:s.substr(pos, n) 解释:返回一个string,包含s中
Twcat_tree
2022/11/29
8350
C++中的仿函数使用
对于上面应用,很明显,可以简单定义一个比较的函数,用来处理字符长度的比较工作。因此,如果想要利用仿函数,一定是需要用到仿函数类的功能,譬如:仿函数类定义的时候,可以传递一个参数,()操作的时候,也可以传递参数,两种参数有作用优先级的时候,可以考虑这种使用方法。下面实现一个简单工厂模式:
全栈程序员站长
2022/07/09
1.3K0
C++中的数学函数汇总
math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:
狼啸风云
2020/07/21
1.8K0
C++中resize函数的用法
resize()是分配容器的内存大小,而reserve()只是设置容器容量大小,但并没有真正分配内存。
全栈程序员站长
2022/07/21
7190
JS的eval函数解密反混淆
作者:matrix 被围观: 10,699 次 发布时间:2014-05-14 分类:零零星星 | 15 条评论 »
HHTjim 部落格
2022/09/26
5.3K0
其他|c++几个容易混淆的点
希望时间的流逝不仅仅丰富我们的阅历,更重要的是通过提炼让我们得以升华,走向卓越。 1编译出错 一段时间没写c/c++的程序了,最近公司一个项目底层的核心算法是用c++写的,由于需要定制一个功能,要在看懂1.0代码基础上,再做功能扩展。IDE选择了Code::Blocks,它是跨平台的,编译器是GNU c++,因此可以运行在linux系统上。 在编译程序时,总是出现几个非常典型的问题,特在此总结下。 2const限定符 const限定符赋值问题,经常容易出错。 例如: const char *pa;
double
2018/04/02
5790
其他|c++几个容易混淆的点
python getopt使用
opts, args = getopt.getopt(sys.argv[1:], 'd:p:t:')
py3study
2020/01/10
5840

相似问题

C++构造函数中的混淆

10

C++中rand()函数的混淆

12

C++中简单的getopt实现

33

C++构造函数混淆

52

C++空函数混淆

46
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文