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(),
标准:背面插入器(标准字符串);