【发布时间】:2014-07-15 04:38:43
【问题描述】:
我有一个方法定义如下:
const std::string returnStringMethod()
{
std::string myString;
// populate myString
return myString;
}
现在,在调用者中,我正在做这样的事情:
const char * ptr = returnStringMethod().c_str();
正如我所见,这返回了一些我没想到的截断字符串。但是,以下工作正常:
std::string str = returnStringMethod();
const char * ptr = str.c_str();
有人可以帮我理解这里发生了什么吗? .
PS:我们每周构建一次代码。我上周提交代码时对此进行了测试,一切都很好。所以,我真的很想知道我在这里可能缺少什么。
谢谢, 帕万。
【问题讨论】:
-
"我们每周构建一次代码" => 可能跑题了,但为什么呢?有什么东西阻止你编译......只要有意义?
-
不,我想说的是,当我上次在关闭更改之前处理此代码时,这并通过了所有测试。
-
除非你真的知道你在做什么,否则不要复制
c_str()返回的指针,而是直接在C-API调用中使用它。c_str()方法旨在用作适配器,这也是它的奇怪名称的原因。 -
好点狼。 @Pavan:取消引用悬空指针是未定义的行为。所以如果你幸运的话它会坏掉,如果你不走运,它可能会毫无问题地工作。
标签: c++ pointers memory-management stdstring