处理char ** argv

时间:2010-01-12 08:39:15

标签: c++ arrays command-line pointers arguments

如何将一系列字符串分配给程序中的char ** argv变量?它是一个命令行参数。我目前正在尝试将.exe应用转换为dll。

例如:

{“string1”,“string2”,“string3”} ---> char ** argv变量

我的问题以某种方式被证实:  How does an array of pointers to pointers work?但我无法使用此处显示的代码段来使用它。救命啊!

3 个答案:

答案 0 :(得分:8)

const char* argv[] = {"string1", "string2", "string3", 0};

如果参数不是编译时常量,我会做类似的事情:

std::vector<const char*> arguments;
arguments.push_back(somePointer);
arguments.push_back(someOtherPointer);
arguments.push_back(0);
const char** argv = &arguments[0];

编辑:使用PaxDiablos信息argv - 数组应为空终止。

答案 1 :(得分:0)

getopt怎么办?

答案 2 :(得分:0)

请注意,Andreas Brincks的回答确实是你想要做的,其中vector可以完成所有繁重的分配并提供异常安全性。我强烈建议您考虑改变无法使用矢量的原因。但如果你真的不能这样做,我想你可以按照下面的代码做一些事情:

int numArgs = YOUR_NUMBER_HERE;

char **myArgv = new char*[numArgs+1];

for (int i=0; i<numArgs; ++i) {
    myArgv[i] = new char[at least size of your argument + 1];
    strncpy(myArgv[i], whereever your string is, buffer size);
    myArgv[buffer size] = '\0';
}
myArgv[numArgs] = NULL;


// use myArgv here


// now you need to manually free the allocated memory
for (int i=0; i<numArgs; ++i) {
    delete [] myArgv[i];
}
delete [] myArgv;