KKsan KKsan - 2 months ago 20
C++ Question

create argc argv in the code

Hi very newbie question but I just can't figure it out:

I have a function named bar

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


argv is supposed to contain

"--dir" and "/some_path/"


How do I create argv and argc so that I can pass them into bar() ? I've tried many ways but I just can't get pointer and type conversion right.

So instead of getting argv from command line, I want to create it in the code.

Thank you for any input!

Answer

My favourite way is like this:

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

Note, that if arguments are static and do not change, then this is a little bit overkill. But this approach has advantage of being RAII compliant. It manages memory for you and deletes objects at right moment. So if argument list is dynamic, then it is the cleanest way.