有以下代码:
int _tmain(int argc, _TCHAR* argv[])
{
std::string strTest("test|result");
const char *cstr = strTest.substr(5).c_str();
std::cout<<cstr<<std::endl;
return 0;
}
此段代码在vc2005下运行结果为空;
在redhat linux下运行结果为:result
解析:在windows下substr函数返回的string字符串是其函数里的一个临时变量,
当函数退出时内存释放,导致cstr取得空值,正确的做法应该是:
std::string aa = strTest.substr(5);
const char* cstr = aa.c_str();
至于linux下为什么正确,只能理解为编译器的问题了,具体细节没深究!请各位大牛解惑?