- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的新程序中使用了 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/
我正在为名为 fp 的命令编写以下代码,该命令存在于一个框架中,用于处理这些已存在的命令。我对 C 相当陌生,我正在尝试使用 getopt_long() 解析此命令的一些参数。目前,参数除了打印参数名
我正在使用 getopt_long 读取命令行选项。代码: #include #include #include int main(int argc, char *argv[]) { i
int next_option; int keep_content =0; int option_index = 0; const string short_options = "c::"; con
我正在编写一些代码来解析命令行输入。我使用getopt_long的方式如下: int c = 0; static struct option long_options[] = { {"mod
我正在使用 getopt 和 getopt_long 来解析 C++ 程序的参数。当正确给出参数时,我没有问题。此外,当给出错误的短参数时,错误消息会正确打印。但是当给出错误的长参数时,我没有收到它的
我有下面的代码。但是当我用 --debug=2 运行它时,调试变量的值为 100。我期望 2...我的错误在哪里?这里的代码: int debug=0; int opt; struct o
int main(int argc , char *argv[]) { int c; int sock; struct sockaddr_in server; char
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: getopt_long() — proper way to use it? 我在 C 程序中遇到 getop
我在解析我正在编写的程序中的参数时遇到问题,代码如下: void parse_args(int argc, char** argv) { char ch; int index = 0;
我是第一次尝试使用 getopt_long() 函数,只是我遇到了不是标志的参数的问题。例如,在我的代码中,当给出一个未知参数时,我想将它用作输入文件。当我只使用一个文件名运行它时,它不会被打印出来,
我正在尝试使用 getopt_long 进行一些基本的选项解析。我的具体问题是当不使用该选项时默认的 int 值被覆盖。我已经通读了文档和一些关于 getopt 的解释,但没有看到任何关于保留默认值/
如果给定一个选项,是否可以告诉 getopt_long 我需要两个参数? 例如,如果 -i 存在,接下来需要两个参数,如果它们不存在,解析将失败。 最佳答案 根据manual和 getopt_long
我一直在阅读如何使用 getopt_long(),以及如何使用 optlong“读取”多字符选项。 我需要从终端解析以下条目: ./bomb –n String –cp Integer –i Inte
我有以下代码 #include #include int main(int argc, char* argv[]){ const struct option longo
当 getopt 或 getopt_long 遇到非法选项时,它将违规选项字符存储在 optopt 中。当非法选项是一个long 选项时,我在哪里可以找到该选项是什么?然后,optopt 中是否存储了
好的,我已经搜索并找到了以下两个 StackOverflow 主题,这些主题让我开始了正确的方向: Argument-parsing helpers for C/UNIX Pass arguments
使用gcc -Wall getopt.c -o options进行编译并运行一些示例后,乍一看似乎可以工作。故意绊倒它会导致段错误。 //straight from the man page stat
这是我的第一个使用 getopt_long() 的程序,所以如果这个问题很琐碎,请原谅我。 当传递给我的程序的第一个参数无效时,我遇到了问题 这是我的主要代码 int main(int argc, c
我正在尝试使用 getopt_long() 创建一个带有可选参数的选项。 这是我的代码: static struct option long_options[] = { {"help", n
我想根据是否存在特定参数来委托(delegate)几个可能的参数列表之一,大致如下: ./test --do-thing-1 --option-A=7 --common-option --option
我是一名优秀的程序员,十分优秀!