我有以下代码,我不确定如何在从命令行运行-arguments之后为文件位置添加可选参数。我一直在做很多阅读,但我发现它令人困惑。这是目前的代码。
int c;
while ((c = getopt(argc, argv, "vdras")) != EOF) {
switch (c) {
case 'v': v = true;
break;
case 'd': d = true;
break;
case 'r' : r = true;
break;
case 'a' : a = true;
break;
case 's' : s = true;
break;
}
}
argc -= optind;
argv += optind;
我现在需要做的是在所有这些命令(或这些命令的子集)的末尾添加一个文件。
因此我可以输入-rda filehere或-a filehere或者只输入filehere作为程序的有效参数。
我一直在阅读THIS链接,这让我相信在所有命令行选项之间放置双分号,因此它看起来像:
while ((c = getopt(argc, argv, "::v::d::r::a::s::")) != EOF) {
允许我在条件之后指定可选参数但是我不知道如何捕获它们。就像在,我一直在尝试制作一些案例,我输入一个随机文件名,并打印出一些测试代码,所以我知道它正在工作,但我似乎无法做到正确。我想知道我是否需要以某种方式将* optarg合并到我的开关中,这将允许我按照选项获得任何参数,但我不确定如何去做。任何解释都会很棒。
答案 0 :(得分:0)
你读过man page了吗? option参数(如果有)将在全局变量optarg
中。
即使您在那里的链接也是如此。您的选项字符串也不需要前导::
- 只有字母后面的内容才有意义。
编辑:这是一个完整的工作示例,说明您正在尝试做什么:
#include <unistd.h>
#include <iostream>
int main(int argc, char **argv)
{
int ch;
while ((ch = getopt(argc, argv, "v:")) != -1)
{
switch (ch)
{
case 'v':
std::cout << optarg << std::endl;
break;
}
}
return 0;
}
输出:
$ ./example -v abcde
abcde