0

我正在使用 getopt_long 读取命令行选项。代码:

#include <getopt.h>
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
    int ch;
    struct option longopts[] = {
        {"password", required_argument, NULL, 'p'},
        {"viewonly", no_argument, NULL, 'v'},
        {"help", no_argument, NULL, 'h'},
        {NULL, 0, NULL, 0}
    };
    while ((ch = getopt_long(argc, argv, "p:vh", longopts, NULL)) != -1) {
        switch (ch) {
        case 'p':
            printf("optarg: %x %s\n", optarg, optarg);
            break;
        case 'v':
            printf("viewonly is set\n");
            break;
        case 'h':
        case '?':
        default:
            fprintf(stderr, "error\n");
            exit(EXIT_FAILURE);
        }
    }
    return 0;
}

我使用这个命令行选项:./a.out --password --viewonly,它应该打印--password缺少参数的错误消息,但从getopt_long不返回'?',但将其--viewonly视为optarg--password输出是:

optarg: 24992bc4 --viewonly

我认为这很奇怪,我应该怎么做才能防止 getopt_long 将选项名称视为参数?

4

1 回答 1

0

我会在我的 switch 语句中检查一些错误(也许检查密码不能以'--'开头)

于 2014-06-24T07:06:59.570 回答