簡體   English   中英

將向量std :: string轉換為char ***

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM