Cast a vector of std::string to char***

前端 未结 2 509
野趣味
野趣味 2021-01-29 01:29

I have an API function that expects a char*** parameter and want to pass a vector. Are there member functions of std::string

相关标签:
2条回答
  • 2021-01-29 01:59

    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 of string objects, not pointers to char*. 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 is const-qualified) you could make an array of pointers, and put results of calls to c_str() on vector's elements into it, like this:

    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;
    

    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.

    0 讨论(0)
  • 2021-01-29 02:11

    "Are there member functions of std::string that let me do that?"

    In short: No.

    That std::vector<std::string> stores the std::string instances in a contiguous array, doesn't mean that the pointers to the underlying char arrays of these string instances appear contiguously in memory.

    0 讨论(0)
提交回复
热议问题