如何将一系列字符串分配给程序中的char ** argv变量?它是一个命令行参数。我目前正在尝试将.exe应用转换为dll。
例如:
{“string1”,“string2”,“string3”} ---> char ** argv变量
我的问题以某种方式被证实: How does an array of pointers to pointers work?但我无法使用此处显示的代码段来使用它。救命啊!
答案 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;