I have an API function that expects a char***
parameter and want to pass a vector<std::string>
.
Are there member functions of std::string
that let me do that?
This way, I only get the char pointer to the first element:
std::vector<std::string> oList(128);
myFunction(oList[0].c_str());
In short: No.
That
std::vector<std::string>
stores thestd::string
instances in a contiguous array, doesn't mean that the pointers to the underlyingchar
arrays of these string instances appear contiguously in memory.There is no way to cast the entire vector to an array of pointers to pointers. You can treat the active portion of the
vector
as if it were an array of vector's elements, but in this case that would be an array ofstring
objects, not pointers tochar*
. Trying to re-interpret it as anything else would be undefined.If you are certain that the API is not going to touch the content of
char*
strings (for example, because it isconst
-qualified) you could make an array of pointers, and put results of calls toc_str()
onvector
's elements into it, like this:However, you need to be very careful passing an array like that to an API that uses an extra level of indirection, because it may need that third asterisk to change the pointer that you pass, for example, by reallocating the array. In this case you might have to use a different mechanism for allocating dynamic memory to match the mechanism used by your API.