gpt4 book ai didi

c - 带/不带选项的 getopt 用法

转载 作者:行者123 更新时间:2023-12-04 00:27:26 29 4
gpt4 key购买 nike

我正在使用 *argv[] 参数编写一个简单的代码。我想知道我是否可以使用 getopt() 函数来实现以下目的。

./myprogram -a PATH
./myprogram PATH

该程序可以只采用 PATH(例如 /usr/tmp),或者除了 PATH 之外还采用 -a 选项getopt() 可以用于这种状态吗?如果可以,怎么做?

最佳答案

The program can either take merely PATH (e.g. /usr/tmp) or take option in addition to PATH. Can getopt() be used for this state? If can, how?

当然。我不确定您在哪里看到了潜在问题,除非您不了解 POSIX 和 getopt()optionsarguments 之间的区别。它们是相关的,但根本不是一回事。

getopt() 适用于实际上没有指定选项的情况,它使您可以访问非选项参数,例如 PATH 似乎适合您,无论指定了多少选项。通常的使用模型是在循环中调用 getopt() 直到它返回 -1 以指示命令行中没有更多可用选项。在每一步,全局变量 optind 变量提供下一个要处理的 argv 元素的索引,并在 getopt() (first) 之后返回-1,optind 提供第一个非选项参数的索引。在您的情况下,这将是您希望找到 PATH.

的位置
int main(int argc, char *argv[]) {
const char options[] = "a";
_Bool have_a = 0;
char *the_path;
int opt;

do {
switch(opt = getopt(argc, argv, options)) {
case -1:
the_path = argv[optind];
// NOTE: the_path will now be null if no path was specified,
// and you can recognize the presence of additional,
// unexpected arguments by comparing optind to argc
break;
case 'a':
have_a = 1;
break;
case '?':
// handle invalid option ...
break;
default:
// should not happen ...
assert(0);
break;
}
} while (opt >= 0);
}

关于c - 带/不带选项的 getopt 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55044365/

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