我希望能够将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保存到变量的方法?任何帮助将不胜感激。
答案 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;