Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将“getopt_long”与无法识别的long选项一起使用时出现分段错误_C++_Pointers_Segmentation Fault - Fatal编程技术网

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

C++ 将“getopt_long”与无法识别的long选项一起使用时出现分段错误,c++,pointers,segmentation-fault,C++,Pointers,Segmentation Fault,我在新程序中使用了getopt_long函数。 它在传递有效的长选项时运行良好。但是,如果我尝试使用无效选项调用程序,即--unknown,则执行会停止,并说明发生了分段错误。完整命令是程序版本--未知 我需要在哪里更改代码才能使程序再次工作? (注意:传递无效的short选项时可以) 这是一个命令行程序。它需要接收子命令作为其第一个参数和每个子命令的特定选项。我想增加对长选项的支持,因为使用短选项确实很困难 char* subcommand = /* ... */; int option_ch

我在新程序中使用了
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;
}
当传递长选项时,它应该打印
未识别选项:--unknown
,与短选项类似。相反,将返回分段错误


以下是详细模式下的选项。

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

我将zeroed options struct添加到长选项数组中,它解决了我关于分段错误的问题,谢谢!请注意,可以使用空结构而不是零选项结构。这不是“空结构”;C中没有这样的东西。
NULL
被定义为
0
,由zero初始化。