C++中return作用于s.c_str()时返回结果出现乱码
#include <iostream>#include <string>using namespace std;string strcatEx(const char *c1, const char *c2){ string s1="",s2=""; if(c1) s1=c1; if(c2) s2=c2; return (s1+s2);}const char *pstrcatEx(const char *c1, const char *c2){ string s=strcatEx(c1, c2); return s.c_str();}const char *pstrcatEx2(const char *c1, const char *c2){ string s1="",s2=""; if(c1) s1=c1; if(c2) s2=c2; string s=s1+s2; return s.c_str();}int main(int argc, char* argv[]){ char *c11="a12",*c12="a21a"; cout<<strcatEx(c11, c12)<<endl; cout<<strcatEx(c11, c12).c_str()<<endl; cout<<pstrcatEx(c11, c12)<<endl; cout<<pstrcatEx2(c11, c12)<<endl; return 0;}//运行结果://VC++6.0 Debugcout<<strcatEx(c11, c12)<<endl; // a12a21acout<<strcatEx(c11, c12).c_str()<<endl; // a12a21acout<<pstrcatEx(c11, c12)<<endl; //葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺cout<<pstrcatEx2(c11, c12)<<endl; //葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺//VC++ 6.0 Releasecout<<strcatEx(c11, c12)<<endl; // a12a21acout<<strcatEx(c11, c12).c_str()<<endl; // a12a21acout<<pstrcatEx(c11, c12)<<endl; // a12a21acout<<pstrcatEx2(c11, c12)<<endl; //(一个笑脸标志)8//C-Free(MinGW5) Debug/Releasecout<<strcatEx(c11, c12)<<endl; // a12a21acout<<strcatEx(c11, c12).c_str()<<endl; // a12a21acout<<pstrcatEx(c11, c12)<<endl; // a12a21acout<<pstrcatEx2(c11, c12)<<endl; // a12a21a//strcatEx(c11, c12).c_str();正常,说明不是c_str()的问题//VC++6.0下通过调试和设置输出发现:string s=strcatEx(c1, c2); //正常string s=s1+s2; //正常s.c_str(); //正常//出现问题的地方应该是 return 作用于 s.c_str() 时,//返回的const char *pstrcatEx和const char *pstrcatEx2不正常