gpt4 book ai didi

c - 你如何处理从 getopt 中获取参数的顺序?

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:07 25 4
gpt4 key购买 nike

我的代码使用 getopt 从命令行获取参数。我希望能够接受三个必需的参数和一个可选的第四个参数。我们分别称这些输入 A 和 B:./main string1 string2 filename./main -n 3 string1 string2 filename

有人告诉我可选参数不需要放在开头,所以下面的也应该有效。我们将此称为输入 C:./main string1 string2 -n 3 filename。请注意,其他 3 个参数必须按此顺序排列。这是我遇到麻烦的部分。

目前,我的代码如下所示:

int c;
int n;
while ((c = getopt(argc,argv,"n:"))!=-1) {
printf("Loop\n");
switch (c) {
case 'n':
cvalue = optarg;
n = atoi(optarg);
break;
case '?':
break;
default:
break;
}
}

如果我输入 B,代码会工作,即进入循环并且输入被正确分配给 n。但是,如果我输入 C,它甚至不会进入循环,即它似乎甚至没有在参数中注册 -n 3。这是预期的行为,还是我的代码中遗漏了什么?我该如何解决这个问题?

最佳答案

getopt() 实现“标准”命令行结构,即所有选项都在所有参数之前(ref)。并不是所有的 Unix 命令都遵循这个“标准”;如果您的命令需要偏离,您可以手动解析 argv[],而无需 getopt() 函数。来自 man 3 getopt:

If there are no more option  characters,  getopt()  returns  -1.   Then
optind is the index in argv of the first argv-element that is not an
option.

关于c - 你如何处理从 getopt 中获取参数的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946974/

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