在代码中创建argc argv

create argc argv in the code

本文关键字:argc argv 创建 代码      更新时间:2023-10-16

你好,这是一个新手问题,但是我就是想不明白:

我有一个名为bar的函数

class foo
{
    public:
        bool bar(int argc, char** argv);
}

argv应该包含

"--dir" and "/some_path/"

我如何创建argv和argc,以便我可以将它们传递给bar() ?我已经尝试了很多方法,但我就是不能得到指针和类型转换的权利。

所以我想在代码中创建argv,而不是从命令行获取argv。

谢谢你的意见!

我最喜欢的方式是这样的:

std::vector<std::string> arguments = {"--dir", "/some_path"};
std::vector<char*> argv;
for (const auto& arg : arguments)
    argv.push_back((char*)arg.data());
argv.push_back(nullptr);
f.bar(argv.size() - 1, argv.data());

注意,如果参数是静态的,并且不会改变,那么这有点矫枉过正。但是这种方法的优点是符合RAII。它为您管理内存并在适当的时候删除对象。因此,如果参数列表是动态的,那么它是最干净的方式。

除此之外,如果f.bar修改了argv数组中的数据,该代码在技术上是UB。通常情况下并非如此。

假设您希望argc和argv的格式与传递给main的格式相同,您可以这样调用它:

foo f;
char *args[] = {
    (char*)"--dir",
    (char*)"/some_path/",
    NULL
};
f.bar(2, args);

(注意:这假设bar不会修改参数字符串-在这种情况下,您应该将参数类型更改为const char **而不是char **)