gpt4 book ai didi

c - 在 C 中使用带有非选项参数的 getopt

转载 作者:太空狗 更新时间:2023-10-29 16:37:20 25 4
gpt4 key购买 nike

我正在用 C 编写一个处理大量命令行参数的小程序,因此我决定使用 getopt 为我对它们进行排序。

但是,我希望两个非选项参数(源文件和目标文件)是强制性的,因此即使没有标志或其他参数,您也必须在调用程序时将它们作为参数。

这是我必须用标志处理参数的简化版本:

while ((c = getopt(argc, argv, "i:d:btw:h:s:")) != -1) {
switch (c) {
case 'i': {
i = (int)atol(optarg);
}
case 'd': {
d = (int)atol(optarg);
}
case 'b':
buf = 1;
break;
case 't':
time = 1;
break;
case 'w':
w = (int)atol(optarg);
break;
case 'h':
h = (int)atol(optarg);
break;
case 's':
s = (int)atol(optarg);
break;
default:
break;
}
}

我如何编辑它以便也处理非选项参数?

我还希望能够在选项之前 之后添加非选项,那么如何处理呢?

最佳答案

getopt 设置 optind 变量以指示下一个参数的位置。

在选项循环之后添加类似的代码:

if (argv[optind] == NULL || argv[optind + 1] == NULL) {
printf("Mandatory argument(s) missing\n");
exit(1);
}

编辑:

如果你想在常规参数之后允许选项,你可以做类似的事情:

while (optind < argc) {
if ((c = getopt(argc, argv, "i:d:btw:h:s:")) != -1) {
// Option argument
switch (c) {
case 'i': {
i = (int)atol(optarg);
}
case 'd': {
d = (int)atol(optarg);
}
case 'b':
buf = 1;
break;
case 't':
time = 1;
break;
case 'w':
w = (int)atol(optarg);
break;
case 'h':
h = (int)atol(optarg);
break;
case 's':
s = (int)atol(optarg);
break;
default:
break;
}
else {
// Regular argument
<code to handle the argument>
optind++; // Skip to the next argument
}
}

关于c - 在 C 中使用带有非选项参数的 getopt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18079340/

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