将命令行中多个程序的参数分开

问题描述 投票:0回答:1

我正在集成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'
}
c++
1个回答
1
投票

尝试用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 **)。

© www.soinside.com 2019 - 2024. All rights reserved.