void display(char * str){
   printf("%s: Missing file\n", str);
}

int main(int argc, char **argv)
{

    int longIndex, opt = 0;
    const char *optString = "h?";

    static const struct option longOpts[] = {
    { "help", no_argument, NULL, 'h' },
    { NULL, no_argument, NULL, 0 }
    };

    opt = getopt_long( argc, argv, optString, longOpts, &longIndex );
    while( opt != -1 ) {
        switch( opt ) {
            case 'h':
            case '?':
                display(argv[0]);
                break;

            default:
                break;
        }

        opt = getopt_long( argc, argv, optString, longOpts, &longIndex );
    }

        return 0;
}


这段代码可以很好地编译,但是当我运行它时,就像这样:

./a.out ?


它不调用显示。我想念什么?

最佳答案

问号“?”当getopt找到不在optstring中的参数时,或者如果它检测到缺少的option参数,则由getopt返回,因此不应使用'?'在optstring中,因为它是为此保留的,相反,您应该使用更传统的“ h”寻求帮助。

看到man page

编辑:
这是一个例子:

switch (opt) {
    case 'n':
        some_flag = 1;
        break;
    case 'h': /* help */
    default: /* '?' unknown opt or missing arg*/
        fprintf(stderr, "Usage: %s [-n nsecs] \n", argv[0]);
        exit(EXIT_FAILURE);
}

关于c - 解析“?”在getopt中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12540964/

10-14 02:12