首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::string::c_str()结果的生命周期是多少?

问std::string::c_str()结果的生命周期是多少?
EN

Stack Overflow用户
提问于 2011-06-23 23:12:25
回答 3查看 30.8K关注 0票数 107

在我的一个程序中,我必须与一些使用const char*的遗留代码进行交互。

假设我有一个结构,它看起来像:

代码语言:javascript
复制
struct Foo
{
  const char* server;
  const char* name;
};

我的高级应用程序只处理std::string,所以我想使用std::string::c_str()来取回const char*指针。

但是c_str()的生命周期是多少呢?

我可以在不面对未定义行为的情况下做这样的事情吗?

代码语言:javascript
复制
{
  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()的结果复制到另一个地方?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2011-06-23 23:15:12

c_str()的返回值仅在下次调用相同字符串的非常数成员函数之前有效

票数 4
EN

Stack Overflow用户

发布于 2011-06-23 23:18:05

从c_str()返回的const char*仅在下一次非常数调用std::string对象之前有效。在这种情况下,您很好,因为在Foo的生命周期内,您的std::string仍然在作用域中,并且在使用foo时,您不需要执行任何其他会更改字符串的操作。

票数 3
EN

Stack Overflow用户

发布于 2011-06-23 23:15:07

只要字符串没有被销毁或修改,使用c_str()就可以了。如果使用以前返回的字符串修改字符串,则定义了c_str()实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6456359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档