如何将char缓冲区的一部分复制到std :: string?

时间:2014-11-30 14:11:16

标签: c++ stdstring stdlist

我尝试在std :: list Person中存储类Users的实例。在将每个实例放到Users之前,我想将buf的前10个字节复制到std :: string Name。我怎么能这样做?

class Person {
  public:   
   Person(){ std::cout << "Constructing Person " << std::endl;}
  private:
   std::string Name;
};

int main() {

  unsigned char buf[1024];
  std::list<Person> Users;

  Person ps;
  Users.push_back(ps);

  return 0;
}

2 个答案:

答案 0 :(得分:2)

您可以为Person提供合适的构造函数。

Person(std::string Name) : Name(std::move(Name)) {}

Person的定义将是

Person ps(std::string(buf, 10));

或直接写:

Users.emplace_back( std::string(buf, 10) );

答案 1 :(得分:2)

您需要更改构造函数才能执行此操作:

class Person {
  public:   
   Person(const char* buf_, size_type size_) 
   : name(buf_,size_) { 
       std::cout << "Constructing Person " << std::endl;
   }
   // ....
};

并在main()

Person ps(buf,10);