有没有一种方法可以将“ char * argv []”保存到C ++中的变量中?

时间:2020-04-02 03:09:47

标签: c++ clang++

我希望能够将argv保存到一个结构中,以便可以将其传递给类似这样的函数:

struct Parameters {
    int argc;
    char * argv[];
};

void Start(
    Parameters P
) {

};

int main (
    int argc,
    char * argv []
) {
    Parameters P;
    P.argc = argc;
    P.argv = & argv;


    return 0;
}

但是:

clang++ -std=c++2a -stdlib=libc++ -rtlib=compiler-rt -Ofast Start.cpp -o Start && ./Start;

我收到此错误:

Start.cpp:21:9: error: array type 'char *[]' is not assignable

是否有将argv保存到变量的方法?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

一种简单的方法是将其转换为字符串vector

int main(int argc, char* argv[])
{
    // Note: use argv + 1 to skip the application name in args.
    //       If you want to include the application name then don't use
    //       the +1
    std::vector<std::string>    args(argv + 1, argv + argc);

    // Now this can be passed to functions easily.
    // args.size()  == number of arguments.
    // args[x] == the string for argument x

}

答案 1 :(得分:0)

您可以简单地更改为:

struct Parameters  
{
    int argc;
    char ** argv;
};

您的argv指向char的指针数组将衰减为指向char的指针的指针。

然后,您的主体变得更简单了:

P.argv = argv;