[英]Cast a vector of std::string to char***
我有一個API函數,需要一個char***
參數,並希望傳遞vector<std::string>
。 有std::string
成員函數可以讓我這樣做嗎?
這樣,我只能將char指針指向第一個元素:
std::vector<std::string> oList(128);
myFunction(oList[0].c_str());
“是否有std :: string的成員函數可以讓我做到這一點?”
簡而言之:不。
std::vector<std::string>
將std::string
實例存儲在連續數組中,並不意味着指向這些字符串實例的基礎char
數組的指針在內存中連續出現。
無法將整個向量轉換為指針數組。 您可以將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使用的機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.