将trns_dt
转换为boost::shared_array<char>
的最佳方法是什么?
以下代码段有效,但看起来不太优雅。
std::string
答案 0 :(得分:3)
Boost shared array使用onConfigurationChanged
来分配其数据,这意味着它在内存中都是连续的。这意味着您可以将指向第一个元素的指针作为C样式字符串,从中可以创建new[]
实例。
这当然要求数据要么有终结符,要么你知道“字符串”的长度。
答案 1 :(得分:1)
结帐以下代码。这会给你一个清晰的想法:
#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");
}
答案 2 :(得分:1)
如果您不想使用strncpy
并且boost::shared_array<char>
担心空终止,您可以写(假设boostString
和stdString
从最初的例子:
std::copy(boostString.begin(), boostString.end(),
std::back_inserter<std::string>(stdString));
答案 3 :(得分:0)
根据&#34;一些程序员老兄的回答我编写了解决方案。
请注意boostString
字符串是零终止的。
boost::shared_array<char> boostString = str.GetCString(CZString::eAscii);
std::string stdStr(boostString.get());