Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ getopt帮助需要c++;_C++_Getopt - Fatal编程技术网

C++ getopt帮助需要c++;

C++ getopt帮助需要c++;,c++,getopt,C++,Getopt,我有以下代码,我不确定如何在从命令行运行时在-arguments之后添加文件位置的可选参数。我已经读了很多书,但我只是觉得很困惑。以下是目前的代码 int c; while ((c = getopt(argc, argv, "vdras")) != EOF) { switch (c) { case 'v': v = true; break; case 'd': d = true; break;

我有以下代码,我不确定如何在从命令行运行时在-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作为程序的有效参数

我一直在阅读这个链接,它让我相信在所有命令行选项之间都放置了双分号,因此它看起来像:

while ((c = getopt(argc, argv, "::v::d::r::a::s::")) != EOF) {
将允许我在条件之后指定可选参数,但我不知道如何捕获它们。就像在中一样,我一直在尝试创建一个案例,其中我输入了一个随机文件名,并让它打印出一些测试代码,这样我就知道它在工作,但我似乎无法正确地得到它。我想知道我是否需要以某种方式将*optarg合并到我的交换机中,这将允许我获得选项后的任何参数,但我真的不确定如何进行。任何解释都很好。

你读过这本书了吗?选项参数(如果有)将位于全局变量
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;
}

但我似乎对optarg无能为力。作为一个测试,我只是试着把它打印出来,用类似于“v”这样的例子:v=true;你能通过
-v somefilename
吗?并修复
?或者只尝试
?你的链接说:是一个扩展名。是的,我运行了./a.exe-v./in.txt,前面的::已被删除。运行./a.exe-v in.txt也会做同样的事情……好吧,让我做一个简单的例子。用完整的例子更新。
$ ./example -v abcde
abcde