C++ boost::共享_阵列<;char>;到std::string

C++ boost::共享_阵列<;char>;到std::string,c++,string,boost,C++,String,Boost,将boost::shared_数组转换为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, bo

boost::shared_数组
转换为
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::shared_数组boostString=DatabaseFileName.GetCString(CZString::eAscii);
std::字符串stdString;
对于(大小i=0;boostString[i]!=0;i++)
{
追加(1,boostString[i]);
}
使用
new[]
分配其数据,这意味着它在内存中都是连续的。这意味着您可以将指向第一个元素的指针作为C样式的字符串,从中可以创建
std::string
实例

当然,这需要数据有一个终止符,或者让您知道“字符串”的长度。

使用
new[]
分配其数据,这意味着它在内存中都是连续的。这意味着您可以将指向第一个元素的指针作为C样式的字符串,从中可以创建
std::string
实例

当然,这需要数据要么有一个终止符,要么让你知道“字符串”的长度。

根据“某个程序员伙计”的回答,我编写了解决方案。 请注意,
boostString
字符串以零结尾

boost::shared_array<char> boostString = str.GetCString(CZString::eAscii);
std::string stdStr(boostString.get());
boost::shared_数组boostString=str.GetCString(CZString::eAscii);
std::string stdStr(boostString.get());
根据“某个程序员伙计”的回答,我对解决方案进行了编码。 请注意,
boostString
字符串以零结尾

boost::shared_array<char> boostString = str.GetCString(CZString::eAscii);
std::string stdStr(boostString.get());
boost::shared_数组boostString=str.GetCString(CZString::eAscii);
std::string stdStr(boostString.get());

签出以下代码。这将使您清楚地了解:

#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");
}
#包括
#包括
#包括
void main()
{   
char*ptr=“mystring”;
boost::共享_数组myIntArray(新字符[strlen(ptr)+1]);
strncpy(myIntArray.get(),ptr,strlen(ptr)+1);
std::string str(myIntArray.get());

std::cout签出以下代码。这会让您清楚地了解:

#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");
}
#包括
#包括
#包括
void main()
{   
char*ptr=“mystring”;
boost::共享_数组myIntArray(新字符[strlen(ptr)+1]);
strncpy(myIntArray.get(),ptr,strlen(ptr)+1);
std::string str(myIntArray.get());

std::cout如果您不想在
strncpy
上闲逛,并且担心
boost::shared_数组
以null结尾,您可以编写(假设原始示例中的
boostString
stdString

std::copy(boostString.begin(), boostString.end(),
    std::back_inserter<std::string>(stdString));
复制(boostString.begin(),boostString.end(), 标准:背面插入器(标准字符串);
如果您不想在
strncpy
上闲逛,并且担心
boost::shared_array
以null结尾,您可以编写(假设原始示例中的
boostString
stdString

std::copy(boostString.begin(), boostString.end(),
    std::back_inserter<std::string>(stdString));
复制(boostString.begin(),boostString.end(), 标准:背面插入器(标准字符串);