有以下代码:
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下为什么正确,只能理解为编译器的问题了,具体细节没深究!请各位大牛解惑?
本文探讨了一段使用std::string substr方法的C++代码在不同操作系统下的表现差异。在Windows环境中,该代码尝试访问一个临时字符串的地址,导致输出为空;而在Linux环境下则能正常获取子字符串。文章揭示了这一现象的原因,并给出了适用于跨平台的解决方案。
1827

被折叠的 条评论
为什么被折叠?



