在我的一个程序中,我必须与一些使用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()的结果复制到另一个地方?
谢谢。
发布于 2011-06-23 23:15:12
c_str()的返回值仅在下次调用相同字符串的非常数成员函数之前有效
发布于 2011-06-23 23:18:05
从c_str()返回的const char*仅在下一次非常数调用std::string对象之前有效。在这种情况下,您很好,因为在Foo的生命周期内,您的std::string仍然在作用域中,并且在使用foo时,您不需要执行任何其他会更改字符串的操作。
发布于 2011-06-23 23:15:07
只要字符串没有被销毁或修改,使用c_str()就可以了。如果使用以前返回的字符串修改字符串,则定义了c_str()实现。
https://stackoverflow.com/questions/6456359
复制相似问题