【问题标题】:boost::shared_array<char> to std::stringboost::shared_array<char> 到 std::string
【发布时间】:2017-08-22 15:17:24
【问题描述】:

boost::shared_array&lt;char&gt; 转换为std::string 的最佳方法是什么? 下面的 sn-p 有效,但看起来不是很优雅。

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

【问题讨论】:

    标签: c++ string boost


    【解决方案1】:

    如果您不想与strncpy 混在一起,并且担心boost::shared_array&lt;char&gt; 是空终止的,您可以编写(假设原始示例中的boostStringstdString

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        根据“Some Programmer dude”的回答,我编写了解决方案。 请注意boostString 字符串是以零结尾的。

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-13
            • 1970-01-01
            • 2011-10-26
            • 1970-01-01
            • 1970-01-01
            • 2010-10-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多