0

我有一个 API 函数,它需要一个char***参数并想要传递一个vector<std::string>. 是否有std::string允许我这样做的成员函数?

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

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

2 回答 2

4

“有 std::string 的成员函数可以让我这样做吗?”

简而言之:没有。

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

于 2014-12-29T11:17:00.850 回答
4

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

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

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 使用的机制。

于 2014-12-29T11:31:03.663 回答