现在我有一个必须返回一个字符串的函数.我看到了一个特定的实现,他从函数中返回一个const char*.
像这样的东西:
const char * GetSomeString()
{
........
return somestlstring.c_str();
}
SomeOtherFoo ()
{
const char * tmp = GetSomeString();
string s = tmp;
}
Run Code Online (Sandbox Code Playgroud)
现在我觉得这有可能出现问题.我的直觉是否正确?或者这是一个非常安全的代码吗?
请给我你的建议.我有一种感觉返回const char*这种方式可能会导致破坏..
谢谢,阿琼
Dav*_*eas 27
取决于somestlstring那里正在做什么和做什么.
如果它是局部变量,则返回指向正在GetSomeString完成时释放的内存的指针,因此它是一个悬空指针和一个错误.
这一切都可归结为somestlstring您在其上执行的生命周期和操作.返回的指针.c_str()保证仅在字符串中的下一个变异操作时有效.因此,如果在构建之前和之前的某些内容发生变化somestlstring,您将处于未定义的行为状态..c_str()s
小智 6
如果您询问函数const char *返回 的生命周期std::string c_str(),它将一直有效,直到您修改从中获取的字符串,或直到字符串被销毁.如果你记住这两个事实,那么从一个函数返回它是可以的(虽然我会说这不是很好的练习).