我有一个函数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();
但我有同样的问题。 为什么会这样?
答案 0 :(得分:2)
c_str()
将const char*
返回std::string
的内部缓冲区。像你一样在这里进行链接方法调用LPCSTR l = myClassInstance.Analyze_().c_str();
会创建一个临时std::string
(Analyze()
的返回),然后返回指向该字符串内部缓冲区的指针。然后,字符串被破坏,当你试图去除时,你会留下一个悬空指针,Undefined Behavior。如果你想使用指向它的缓冲区,只需保存std::string
。