gpt4 book ai didi

c++ - 将 `getopt_long` 与无法识别的长选项一起使用时出现段错误

转载 作者:行者123 更新时间:2023-11-30 04:49:05 34 4
gpt4 key购买 nike

我在我的新程序中使用了 getopt_long 函数。当传递一个有效的长选项时它运行良好。但是,如果我尝试使用无效选项(即 --unknown)调用程序,则执行会停止,表示发生了段错误。完整命令是程序版本--未知

我需要在哪里更改代码才能使我的程序再次运行?(注意:传递无效的 short 选项时没问题)

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

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 就像短选项一样。相反,会返回段错误。

这是 full output log of Valgrind在详细模式下。

最佳答案

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

关于c++ - 将 `getopt_long` 与无法识别的长选项一起使用时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553005/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com