将`getopt_long`与无法识别的long选项一起使用时出现分段错误

马克西姆·劳努瓦(Maxime Launois)

getopt_long在新程序中使用了该函数。传递有效的长选项时,它运行良好。但是,如果我尝试使用无效选项调用程序,即--unknown,则执行停止,并说发生了分段错误。完整命令为program version --unknown

我需要在哪里更改代码才能使程序再次运行?(注意:传递无效的短期期权时可以使用)

这是用于命令行程序的。它需要接收子命令作为其第一个参数,以及每个子命令特有的选项。我想添加对长选项的支持,因为使用短选项确实很困难。

char* subcommand = /* ... */;
int option_char = 0;
int exit_code = 0;

/* ... */
// Note: argv should be an array of strings containing the command-line arguments
int pm_parse_arguments(int argc, char** argv) {
    opterr = 0;
    if(strcmp(subcommand, "version") == 0) {
        return pm_parse_version_arguments(argc, argv);
    } else {
        // No recognized subcommand
        pm_global_unrecognized_subcommand(subcommand);
    }
    return exit_code;
}

int pm_parse_version_arguments(int argc, char** argv) {
    // List of long options
    struct option long_options[] = {
        {"help",        no_argument, 0, 'h'},
        {"major",       no_argument, 0, 'm'},
        {"minor",       no_argument, 0, 0},
        {"revision",    no_argument, 0, 'r'},
    };

    // Index of option
    int option_index = 0;

    while((option_char = getopt_long(argc, argv, ":hmr", long_options, &option_index)) != -1) {
        switch(option_char) {
            /* ... */
        }
    return exit_code;
}

Unrecognized option: --unknown长短选项--unknown一样,在传递长选项时应该打印而是返回分段错误。

这是Valgrind在详细模式下完整输出日志

Sneftel

getopt_long要求长选项数组以零选项结构终止(类似于字符串以空值终止)。否则,它将不知道有多少个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将选项卡与ViewPager一起使用时出现错误“ Java.lang.IllegalStateException活动已被破坏”

解决将OnModelCreating与ApplicationDbContext一起使用时出现的“未定义键”错误?

将getopt_long()与我自己的代码捆绑在一起?

将Typescript与React-Redux一起使用时出现类型错误

将HWIOAuthBundle与FOSUserBundle一起使用时出现“找不到用户名”错误

使用`getopt_long`时了解`option long_options []`

将Pandoc与Markdown一起使用时出现紧缩列表错误

将拆分与数据帧一起使用时出现未找到的错误

将net-ssh与可与ssh命令一起使用的选项一起使用时,ConnectionTimeout错误?

将信号量与POSIX共享内存一起使用时出现分段错误

C:getopt_long()始终返回无效选项

将std :: invoke_result_t与通用lambda一起使用时出现硬错误

将SQL与INSERT INTO一起使用时出现错误1064 ... SELECT ...重复键更新

将模糊搜索与猫鼬一起使用时出现打字稿错误

将pynput与pyinstaller一起使用时出现错误

将SQL Server与MySQL一起使用时出现“不支持选项”错误

将EclEmma(eclipse插件)与JMockit一起使用时出现错误(仅与Delegate()一起使用)

使用getopt_long处理用户错误

将Scanner与Double一起使用时出现Java错误

当将`track by $ index`与过滤器一起使用时,出现错误。怎么解决呢?

将cx_freeze与pythoncom一起使用时出现导入错误

getopt_long() 的段错误

将 strcpy 与链表成员一起使用时出现分段错误

将撇号与 materialize 一起使用时出现类型错误

将排序与 seq::index::sample 一起使用时出现 Rust 错误

将 pyyaml 与 FastAPI 一起使用时出现 CORS 错误

将 Sphinx 与 Django 一起使用时出现 Autodoc 错误

将 Spring Security 与 Spring Gateway 一起使用时出现“无法访问 javax.servlet.Filter”错误

将 HttpServlet 与 JAVA 一起使用时出现关闭错误