我有一个函数,它将返回一个char*.由于我必须连接一些字符串,我写了以下行:
std::string other_text; // ... func(("text" + other_text).c_str());
我知道我可以避免命名我想要使用的字符串的问题.我只是想借此机会提出一个更普遍的问题:调用临时变量的方法是否安全?它符合标准吗?
调用临时变量的方法是安全的,但是不能安全地返回临时变量的char*以供以后使用.
这个char*指向一个即将被释放的缓冲区.一旦它被释放,你将有一个指向内存中无效区域的指针.
相反,请返回一个std :: string对象.
你可以调用temporaries上的方法,但是你必须要小心对象的生命周期 - 特别是,如果你有一个函数返回c_str()
一个临时调用的函数std::string
,那么当函数返回时该字符串对象将被销毁.
您上面的代码遇到了这个问题.