我正在转换我的应用程序,以便能够用作库。为此,我想提供将字符串向量传递给库的默认运行例程的可能性。
我遇到的问题实际上是创建let
。这是我目前的实现,在源代码中已经注释掉,因为它不起作用:
char**
我得到的错误:
IceTea* IceTea::setupCli(vector<string> strings) {
int argc=strings.size(), i=0;
char* argv[argc];
vector<string>::iterator it;
for(it=strings.begin(); it != strings.end(); ++it) {
argv[i++] = (char*)it->c_str();
}
// Pass the char** to the original method.
return this->setupCli(argc, argv);
}
答案 0 :(得分:4)
我担心您无法在固定时间内将vector<string>
转换为char**
。 vector<string>
可以非常轻松地转换为string*
,string
可以很容易地转换为char*
,但无法将矢量转换为char**
。实际上,这是一个非常类似于int[10][20]
无法轻易转换为int**
的问题。
现在,如果你必须这样做,那么
vector<char*> pointerVec(strings.size());
for(unsigned i = 0; i < strings.size(); ++i)
{
pointerVec[i] = strings[i].data();
} //you can use transform instead of this loop
char** result = pointerVec.data();
您的代码存在的主要问题是您使用的c_str
会返回const char *
。请注意,我使用的是data()
成员函数,它返回非const指针。您的尝试与我的建议之间的另一个区别是,您使用的长度数组不是常量表达式。这在标准C ++中是非法的。我使用了一个向量,后来将其转换为具有相同data()
函数的指针。