gpt4 book ai didi

c++ - getopt_long 将选项名称视为参数

转载 作者:行者123 更新时间:2023-11-30 17:32:00 24 4
gpt4 key购买 nike

我正在使用 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 视为 --passwordoptarg。输出为:

optarg: 24992bc4 --viewonly

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

最佳答案

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

关于c++ - getopt_long 将选项名称视为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24379579/

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