将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]);
}发布于 2017-03-29 08:46:43
签出以下代码。这将给你一个清晰的想法:
#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");
}发布于 2017-03-29 08:37:05
Boost共享阵列使用new[]分配数据,这意味着它在内存中都是连续的。这意味着您可以以C样式字符串的形式获得指向第一个元素的指针,从中可以创建一个std::string实例。
当然,这需要数据具有终止符,或者让您知道“字符串”的长度。
发布于 2017-03-29 19:26:05
如果您不想与strncpy混在一起,并且担心boost::shared_array<char>是空的,那么可以编写(假设boostString和stdString来自原始示例:
std::copy(boostString.begin(), boostString.end(),
std::back_inserter<std::string>(stdString));https://stackoverflow.com/questions/43088360
复制相似问题