Приведите вектор std :: string к символу ***

У меня есть функция API, которая ожидает char*** параметр и хотите передать vector<std::string>,
Есть ли функции-члены std::string что позволило мне сделать это?

Таким образом, я получаю только указатель на первый элемент:

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

0

Решение

«Есть ли функции-члены std :: string, которые позволяют мне это делать?»

Короче говоря: нет.

Тот std::vector<std::string> хранит std::string экземпляры в непрерывном массиве, не означает, что указатели на основной char массивы этих строковых экземпляров появляются непрерывно в памяти.

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.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector