簡體   English   中英

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

[英]boost::shared_array<char> to std::string

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]);    
}

Boost共享數組使用new[]分配其數據,這意味着它們在內存中都是連續的。 這意味着您可以獲取一個指向第一個元素的C風格字符串的指針,從中可以創建一個std::string實例。

當然,這需要數據具有終結符,或者讓您知道“字符串”的長度。

簽出以下代碼。 這將給您清楚的主意:

#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");
}

如果您不想使用strncpy來解決問題,而擔心boost::shared_array<char>是以空boost::shared_array<char>結尾的,則可以編寫(假設原始示例中的boostStringstdString為:

std::copy(boostString.begin(), boostString.end(),
    std::back_inserter<std::string>(stdString));

根據“ Some Programmer dude”的回答,我對解決方案進行了編碼。 請注意, boostString字符串以零結尾。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM