转换错误,std :: string - > LPCSTR

时间:2016-08-25 15:07:14

标签: c++ visual-c++

我有一个函数Analyze_,它返回一个带有一些信息的std :: string,I 想要它以LPCSTR形式。 当我像这样使用c_str()时,它可以工作并且我存储我的信息:

std::string s =  myClassInstance.Analyze_();
LPCSTR l      = s.c_str();

但是当我把它写得更短时,如下所示,我得到了一系列的':'

LPCSTR l = myClassInstance.Analyze_().c_str();

在Analyze_()之前调用c_str()吗?我想这应该是不可能的 因为它是一个函数,而不是一个字符串。

我尝试了其他解决方案,例如直接从生成字符串的字符串流转换它,然后返回它,如下所示:

std::stringstream ss;
ss << "Bla blub...\n";
return ss.str().c_str();

但我有同样的问题。 为什么会这样?

1 个答案:

答案 0 :(得分:2)

c_str()const char*返回std::string的内部缓冲区。像你一样在这里进行链接方法调用LPCSTR l = myClassInstance.Analyze_().c_str();会创建一个临时std::stringAnalyze()的返回),然后返回指向该字符串内部缓冲区的指针。然后,字符串被破坏,当你试图去除时,你会留下一个悬空指针,Undefined Behavior。如果你想使用指向它的缓冲区,只需保存std::string