首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中return作用于s.c_str()时返回结果出现乱码,该怎么处理

2012-05-29 
C++中return作用于s.c_str()时返回结果出现乱码C/C++ code#include iostream#include stringusing nam

C++中return作用于s.c_str()时返回结果出现乱码

C/C++ code
#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不正常


我的问题:(在VC++6.0下)
1. cout<<pstrcatEx(c11, c12)<<endl;为什么在两种模式下结果不一样
2. pstrcatEx和pstrcatEx2执行的代码本质是相同的,为什么结果不同

[解决办法]
第二个和第三个函数都返回了本地string的c_str,在函数返回后这个string对象会析构,它的c_str是未定义的行为。

热点排行