首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::shared_array<char>到std::string

boost::shared_array<char>到std::string
EN

Stack Overflow用户
提问于 2017-03-29 08:34:16
回答 4查看 1.1K关注 0票数 1

boost::shared_array<char>转换为std::string的最佳方法是什么?下面的片段可以工作,但看起来不太优雅。

代码语言:javascript
复制
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]);    
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-29 08:46:43

签出以下代码。这将给你一个清晰的想法:

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2017-03-29 08:37:05

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

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

票数 3
EN

Stack Overflow用户

发布于 2017-03-29 19:26:05

如果您不想与strncpy混在一起,并且担心boost::shared_array<char>是空的,那么可以编写(假设boostStringstdString来自原始示例:

代码语言:javascript
复制
std::copy(boostString.begin(), boostString.end(),
    std::back_inserter<std::string>(stdString));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43088360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档