C++中的字符串复制

C++中的字符串复制,c++,string,C++,String,我想将此构造函数的参数从const char*转换为std::string,但我不知道如何正确地将新名称复制到name Player::Player(const char* name) : level(1),life(1),strength(1),place(0){ char* new_player_name = new char[strlen(name) + 1]; strcpy(new_player_name, name); this->play

我想将此构造函数的参数从const char*转换为std::string,但我不知道如何正确地将新名称复制到name

Player::Player(const char* name) :
        level(1),life(1),strength(1),place(0){
    char* new_player_name = new char[strlen(name) + 1];
    strcpy(new_player_name, name);
    this->player_name = new_player_name;
}

Player::Player(string name) :
        level(1),life(1),strength(1),place(0){
    string new_player_name(' ',name.length() + 1); //#1
// I didn't know how to proceed 
}
类别数据成员:

class Player {
    char* player_name;
    int level;
    int life;
    int strength;
    int place;
};
考虑将player_名称设置为std::string

然后你的构造函数就可以开始了

Player::Player(const char* name) : player_name(name)
{
您不需要摆弄所有这些动态分配的字符数组

您可以将名称类型更改为const std::string&也可以:

考虑将player_名称设置为std::string

然后你的构造函数就可以开始了

Player::Player(const char* name) : player_name(name)
{
您不需要摆弄所有这些动态分配的字符数组

您可以将名称类型更改为const std::string&也可以:


Player::Playerstring name:Player_name你的意思是这样的,对吗?@Yasmin12:就我个人而言,我会通过const引用来避免sting副本,尽管编译器可能会对其进行优化。参见修改后的答案。不完全正确,您可以使用const char*name作为参数,或者使用const string&name作为@Bathsheba所说的参数。我建议您亲自阅读[specs of string class here],我将通过std::string_视图来避免构建或提供std::string的需要。遗憾的是,std::string_视图没有像std::string那样具有0-终止符的变体。@重复数据消除程序:嗯,我说,这太时髦了。你可能想回答解释原因。Player::Playerstring name:Player\u name你的意思是这样的,对吗?@Yasmin12:就个人而言,我会通过const引用来避免sting副本,尽管编译器可能会对其进行优化。参见修改后的答案。不完全正确,您可以使用const char*name作为参数,或者使用const string&name作为@Bathsheba所说的参数。我建议您亲自阅读[specs of string class here],我将通过std::string_视图来避免构建或提供std::string的需要。遗憾的是,std::string_视图没有像std::string那样具有0-终止符的变体。@重复数据消除程序:嗯,我说,这太时髦了。你可能想回答解释原因。