我有一个函数Analyze_,它返回一个包含一些信息的std::string,但是我希望它是LPCSTR表单。当我像这样使用c_str()时,它可以工作,并存储我的信息:
std::string s = myClassInstance.Analyze_();
LPCSTR l = s.c_str();但是,当我把它写得更短时,像下面这样,我会得到一系列的'Ỳ's:
LPCSTR l = myClassInstance.Analyze_().c_str();它是在c_str()之前调用Analyze_()吗?我想那应该是不可能的,因为它是一个函数,而不是字符串。
我尝试了其他解决方案,例如从生成字符串的字符串流直接转换它,然后返回它,如下所示:
std::stringstream ss;
ss << "Bla blub...\n";
return ss.str().c_str();但我也有同样的问题。为什么会发生这种情况?
发布于 2016-08-25 15:09:37
c_str()将一个const char*返回到std::string的内部缓冲区。链接方法调用就像在这里所做的一样,LPCSTR l = myClassInstance.Analyze_().c_str();创建一个临时std::string (Analyze()的返回),然后返回指向该字符串的内部缓冲区的指针。然后,字符串被销毁,您将有一个悬空指针,在尝试释放时没有定义的行为。如果要使用指向其缓冲区的指针,只需保存std::string。
https://stackoverflow.com/questions/39148803
复制相似问题