使用c_str()时std :: string的未定义行为

Sit*_*esh 0 c++ string copy char

以下代码示例行为未定义..

char * getName()
{
   std::string name("ABCXYZ");
   return name.c_str();
}
Run Code Online (Sandbox Code Playgroud)

这是因为名称超出了范围.但是我想了解当我们返回一个std :: string并且它不会产生未定义的行为时它是如何不同的?

Dav*_*rtz 5

当您return有值时,该值将安全地返回给调用者.这就是return声明的作用.

在您调用的情况下,您c_str返回的值是指向字符串的指针.一旦字符串被销毁,该指针现在指向任何特定的东西.该值安全返回,它只是没有什么你可以用它做安全.

a的值string是字符串的内容.所以在这种情况下,它是传递给调用者的字符串的内容.可以说,std::string该类的主要目的是提供一个对象,其值是字符串的内容.