C++中的字符串复制
我想将此构造函数的参数从const char*转换为std::string,但我不知道如何正确地将新名称复制到nameC++中的字符串复制,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
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-终止符的变体。@重复数据消除程序:嗯,我说,这太时髦了。你可能想回答解释原因。