使用std :: string构造函数复制const char*

Pet*_*isu 1 c++ string std char

这段代码好吗?

void SomeClass :: foo(const char * _name) {
     //name is of type const char *
     name = std::string(_name).c_str();
}
Run Code Online (Sandbox Code Playgroud)

它看起来像是在工作,但我不确定它是否正常

我应该做一个旧学校strcpy吗?

ybu*_*ill 6

没关系,因为它编译并且不会导致未定义的行为.

并不是因为名称指向的语句完成执行后一个无效的内存确定.

name = std::string(_name).c_str();
Run Code Online (Sandbox Code Playgroud)

在此语句的末尾,临时的std :: string被销毁,它释放了c_str()的内存.

我应该做一个旧学校strcpy吗?

不,只需将名称更改为std :: string:

void SomeClass :: foo(const char * _name) {
     //name is of type std::string
     name = _name;
}
Run Code Online (Sandbox Code Playgroud)