在我的一个程序中,我必须与一些可以使用的遗留代码进行交互const char*
.
可以说我有一个如下所示的结构:
struct Foo
{
const char* server;
const char* name;
};
我的更高级别的应用程序只处理std::string
,所以我想到使用std::string::c_str()
去取回const char*
指针。
但人的寿命是多少c_str()
?
我可以做这样的事情而不面临未定义的行为吗?
{
std::string server = "my_server";
std::string name = "my_name";
Foo foo;
foo.server = server.c_str();
foo.name = name.c_str();
// We use foo
use_foo(foo);
// Foo is about to be destroyed, before name and server
}
或者我应该立即复制结果c_str()
到另一个地方?
The c_str()
如果结果无效std::string
被销毁或者调用字符串的非常量成员函数。因此,如果您需要保留它,通常您会想要制作一份副本。
就您的示例而言,结果似乎是c_str()
可以安全使用,因为字符串在该范围内不会被修改。 (然而,我们不知道什么use_foo()
or ~Foo()
可能会用这些价值观来做事;如果他们将字符串复制到其他地方,那么他们应该做一个真正的copy,而不仅仅是复制char
指点。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)