【发布时间】:2011-09-21 07:57:19
【问题描述】:
在我的一个程序中,我必须与一些适用于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() 的结果复制到另一个地方?
谢谢。
【问题讨论】:
-
当我在函数中定义一个本地字符串并返回
.c_str()时发生在我身上。我不明白为什么有时我只得到字符串的一部分,直到我明白const char*不会永远存在,但直到字符串被销毁
标签: c++ string c-strings lifetime c-str