我正在集成2个程序,并将它们合并为一个程序(我知道,这并不理想)。我希望命令行参数看起来像
bin/programName -optionsProgram1 --optionsProgram2
我已经解析了选项,所以现在有了单独的参数集,如下所示。
bin/programName -optionsProgram1
bin/programName --opionsProgram2
这太好了,正是我所需要的。问题在于我是通过将参数推入向量来做到这一点的,现在我需要使用指向字符数组的指针。谁能推荐一种更好地将向量转换为char *的方法?另外,这些必须最后以char **的形式返回,请记住这些。
我尝试使用strncpy并意识到存在类型错误。我的尝试如下所示
。h摘录
std::vector<std::string> myVec; //hold the arguments, one at each pos
std::vector<char*> myCharArray; //intended location for result of conversion
。cpp摘录
size_t vecSize = myVec.size()
size_t charVecSize;
myCharArray.resize(vecSize);
for(size_t i=0; i < vecSize; ++i)
{
csize = myVec.size()+1 //include null
myCharArray[i] = new char[csize]
strncpy(myCharArray[i], myVec[i].c_str(), csize);
myCharArray[i][csize-1] = '\0'
}
尝试用std::vector<const char*>
中的指针填充std::string::c_str()
,例如:
std::vector<std::string> myVec;
std::vector<const char*> myCharArray;
// populate myVec as needed ...
...
// add +1 if you need the array to be null-terminated...
myCharArray.reserve(myVec.size()/*+1*/);
for (auto &s : myVec) {
myCharArray.push_back(s.c_str());
}
//myCharArray.push_back(nullptr);
or:
myCharArray.resize(myVec.size()/*+1*/);
for (size_t i = 0; i < myVec.size(); ++i) {
myCharArray[i] = myVec[i].c_str();
}
//myCharArray.back() = nullptr;
or:
#include <algorithm>
myCharArray.resize(myVec.size()/*+1*/);
std::transform(myVec.begin(), myVec.end(), myCharArray.begin(),
[](std::string &s){ return s.c_str(); });
//myCharArray.back() = nullptr;
然后您可以根据需要使用myCharArray.data()
(即const char **
)。