getopt 不解析参数的可选参数

2024-01-05

在 C 中,getopt_long 不会解析命令行参数参数的可选参数。

当我运行程序时,可选参数无法被识别,就像下面运行的示例一样。

$ ./respond --praise John
Kudos to John
$ ./respond --blame John
You suck !
$ ./respond --blame
You suck !

这是测试代码。

#include <stdio.h>
#include <getopt.h>

int main(int argc, char ** argv )
{
    int getopt_ret, option_index;
    static struct option long_options[] = {
               {"praise",  required_argument, 0, 'p'},
               {"blame",  optional_argument, 0, 'b'},
               {0, 0, 0, 0}       };
    while (1) {
        getopt_ret = getopt_long( argc, argv, "p:b::",
                                  long_options,  &option_index);
        if (getopt_ret == -1) break;

        switch(getopt_ret)
        {
            case 0: break;
            case 'p':
                printf("Kudos to %s\n", optarg); break;
            case 'b':
                printf("You suck ");
                if (optarg)
                    printf (", %s!\n", optarg);
                else
                    printf ("!\n", optarg);
                break;
            case '?':
                printf("Unknown option\n"); break;
        }
    } 
    return 0;
}

尽管 glibc 文档或 getopt 手册页中未提及,但长样式命令行参数的可选参数需要“等号”(=)。将可选参数与形参分隔开的空格不起作用。

使用测试代码运行的示例:

$ ./respond --praise John
Kudos to John
$ ./respond --praise=John
Kudos to John
$ ./respond --blame John
You suck !
$ ./respond --blame=John
You suck , John!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getopt 不解析参数的可选参数 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析

随机推荐

  • 从 OSX 中删除 iOS SDK

    这不是一个编程问题 而是关于 SDK 和 IDE 的问题 在过去的几年里 我已经安装了大量不同的 XCode 现在我的硬盘几乎已满 每个 SDK 的运行速度约为 5 GB 而且我的存储空间越来越低 我有几个问题 3个问题 我可以删除旧的吗
  • OSGi 线程模型

    我在网上搜索过但未能找到满意的答案 OSGi 容器中的线程模型是什么 例如 它是否只是为每个注册的包生成一个新线程 任何有关线程模型的参考都会很棒 您还没有找到任何东西 因为不存在 OSGi 线程模型 这样的东西 捆绑包只是存在并且不 具有
  • Android 在选项卡中的嵌套活动中使用 startActivityForResult。

    我正在编写一个应用程序 该应用程序由在 tabhost 中创建的多个选项卡组成 intent new Intent setClass this Home class spec tabHost newTabSpec Home setIndic
  • 是否有 R 函数用于按组连续估算缺失年份值?

    我的数据框看起来像 df lt data frame ID c A A A A B B B B C C C C D D D D grade c KG 01 02 03 KG 01 02 03 KG 01 02 03 KG
  • 自动从包中的sysdata.rda加载数据

    我花了很多时间寻找可能是一个非常基本的问题的答案 但我就是找不到解决我的问题的方法 我发现的最接近的是这次交流 https stat ethz ch pipermail r devel 2011 August 061786 html从几年前
  • Android studio - 模拟器:无法 statvfs() 路径错误

    当我想在 Android Studio 3 2 中通过模拟器运行我的 android 应用程序时 出现此错误 我只想运行 Hello world 示例 Emulator Couldn t statvfs path 我遇到了同样的问题 并意识
  • 使用预先存在的访问令牌通过 ASP.NET 创建 YouTube 服务

    我一直在开发一个网站 供用户将视频上传到共享的 YouTube 帐户以供以后访问 经过大量工作 我已经能够获得活动令牌和可行的刷新令牌 然而 初始化的代码YouTubeService对象看起来像这样 UserCredential crede
  • 为 webrtc 实现 janus 网关

    我正在按照 janus 文档构建视频 MCU 系统 我根据自述文件安装了它的所有依赖项 http janus conf meetecho com docs 之后当我使用运行脚本时sh install sh我收到以下错误 In file in
  • WebRTC 候选信息末尾的数据是什么?

    我使用 Chrome 中的 WebRTC API 以及我自己根据 W3C 规范和其他问题编写的 WebSocket 脚本设置了一个基本的视频聊天应用程序 但有时 当一台 PC 通过 WebSocket 连接将 ICE 候选信息发送到另一台
  • PyCharm 性能优于 CMD python 命令

    我正在开发一个用于串行通信的 python 脚本 我正在 pyCharm 4 5 python27 和 windows 中开发它 我刚刚意识到当我在 pyCharm 上执行它时 它比我使用命令时运行得更快 python main py or
  • 证明匹配语句

    为了解决一个练习 我有以下代表整数的定义 Inductive bin Type Zero bin Twice bin gt bin TwiceOne bin gt bin 这个想法是 Twice x is 2 x 两次一x is 2 x 1
  • Ruby:Windows 路径转换

    我经常在脚本中使用长路径 因为我在 Windows 上 所以我必须将这些长路径转换为 nix 样式 并使用斜杠而不是反斜杠 如果此后您复制该路径以转到该文件夹 这没什么困难 但很烦人 因为在资源管理器中您必须再次执行相反的操作 所以我做了一
  • 将带符号的十进制转换为使用二进制补码编码的十六进制

    我需要编码signed通过二进制补码表示法将整数表示为十六进制 例如我想转换 e g 24375 to 0xffffa0c9 到目前为止 我一直在以下几方面开展工作 parseInt 24375 toString 2 gt 10111110
  • F# 中的“表达式问题”可以解决吗?

    我一直在看一个有趣的video http channel9 msdn com Shows Going Deep C9 Lectures Dr Ralf Lmmel Advanced Functional Programming Type C
  • 语法错误或访问冲突:1140 GROUP 列的混合 laravel

    我已经编写了这个带有分页的查询 items Item select items sub category name category name sub category slug category slug gt join sub cate
  • 使用 apache mod_proxy 缺少 Doctype HTML 部署

    我有一个奇怪的问题 我的 Vaadin 应用程序在我的计算机 本地 上运行良好 我刚刚部署了网站 现在遇到了问题 The 第一行中的标签丢失 我不知道为什么 但我认为这会导致一些问题 因为网站正在以 Quirks 模式显示 有趣的是 当我在
  • 当用户关闭(弹出)窗口时调用一些 JavaScript

    当用户关闭窗口时可以调用一些JS吗 我搜索了 JS 事件处理程序 发现只有 onunload 它会在用户离开页面时调用脚本 而不必关闭窗口 预期用途是调用 AJAX 脚本来取消设置与弹出窗口相关的一些会话 可能有也可能没有更好的方法来实现这
  • OCaml:在 GTK 中嵌入 openGL

    我想将 openGL 图形嵌入 OCaml 中的 GTK 程序中 您对如何做到这一点有什么想法吗 编辑 Tk 似乎已经解决了问题Togl http togl sourceforge net 在我的 ubuntu 中 我有包 liblablg
  • 如何在ServiceStack中使用Dapper

    目前 我使用 OrmLite 进行数据库操作 我也计划使用 Dapper ORM 但是谁能告诉我如何将 DapperORM 集成到 ServiceStack 中 我是否需要使用 Dapper 和插件来实现 IDbConnection 和 I
  • getopt 不解析参数的可选参数

    在 C 中 getopt long 不会解析命令行参数参数的可选参数 当我运行程序时 可选参数无法被识别 就像下面运行的示例一样 respond praise John Kudos to John respond blame John Yo