![](/img/trans.png)
[英]Cast boost::shared_array<char> to boost::shared_array<const char>
[英]boost::shared_array<char> to std::string
將boost::shared_array<char>
轉換為std::string
的最佳方法是什么? 以下代碼片段有效,但看起來並不優雅。
boost::shared_array<char> boostString = DatabaseFileName.GetCString(CZString::eAscii);
std::string stdString;
for(size_t i = 0; boostString[i] != 0; i++)
{
stdString.append(1, boostString[i]);
}
Boost共享數組使用new[]
分配其數據,這意味着它們在內存中都是連續的。 這意味着您可以獲取一個指向第一個元素的C風格字符串的指針,從中可以創建一個std::string
實例。
當然,這需要數據具有終結符,或者讓您知道“字符串”的長度。
簽出以下代碼。 這將給您清楚的主意:
#include <iostream>
#include <string>
#include <boost\shared_array.hpp>
void main()
{
char *ptr = "mystring" ;
boost::shared_array<char> myIntArray(new char[strlen(ptr) + 1]);
strncpy(myIntArray.get(), ptr, strlen(ptr) + 1);
std::string str(myIntArray.get());
std::cout << str << std::endl;
system("pause");
}
如果您不想使用strncpy
來解決問題,而擔心boost::shared_array<char>
是以空boost::shared_array<char>
結尾的,則可以編寫(假設原始示例中的boostString
和stdString
為:
std::copy(boostString.begin(), boostString.end(),
std::back_inserter<std::string>(stdString));
根據“ Some Programmer dude”的回答,我對解決方案進行了編碼。 請注意, boostString
字符串以零結尾。
boost::shared_array<char> boostString = str.GetCString(CZString::eAscii);
std::string stdStr(boostString.get());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.