将std :: string的向量转换为char ***

时间:2014-12-29 11:12:50

标签: c++ string pointers char-pointer

我有一个API函数,需要char***参数并希望传递vector<std::string>。 是否有std::string的成员函数可以让我这样做?

这样,我只得到第一个元素的char指针:

std::vector<std::string> oList(128);
myFunction(oList[0].c_str());

2 个答案:

答案 0 :(得分:4)

  

&#34;是否有std :: string的成员函数让我这样做?&#34;

简而言之:否。

std::vector<std::string>std::string实例存储在连续数组中,并不意味着指向这些字符串实例的基础char数组的指针在内存中连续出现。 / p>

答案 1 :(得分:4)

无法将整个向量强制转换为指向指针的数组。您可以将vector的活动部分视为向量元素的数组,但在这种情况下,它将是string个对象的数组,而不是指向char*的指针。试图将其重新解释为其他任何东西都是未定义的。

如果您确定API不会触及char*字符串的内容(例如,因为它是const - 限定的),您可以创建一个指针数组,并放置结果c_str()vector元素的调用,如下所示:

char **pList = new char*[oList.size()];
for (int i = 0 ; i != oList.size() ; i++) {
    pList[i] = oList[i].c_str();
}
myTrippleStarFunction(&pList); // Use & to add an extra level of indirection
delete[] pList;

但是,您需要非常小心地将类似的数组传递给使用额外级别间接的API,因为它可能需要第三个星号来更改您传递的指针,例如,通过重新分配数组。在这种情况下,您可能必须使用不同的机制来分配动态内存以匹配API使用的机制。