std:string赋值时的疑点
std::string赋值时的疑问[alignleft]C/C++ codebool _IsPartOfEx( const string& hostString, const stri
std::string赋值时的疑问
[align=left]
C/C++ code bool _IsPartOfEx( const string& hostString, const string& subString ) { string strHost = hostString; string strSub = subString; //后面省略······ }
这是之前的代码,在调用时传入两个string的引用,然后赋值给strHost和strSub,可是赋值后strHost和strSub的值根本和引用的值不同,例如“SHAN SHAN SS”,出入后就变成了“SHAN SHAN ”。
但是当我将代码修改为如下:
C/C++ codebool _IsPartOfEx( const string& hostString, const string& subString ) { string strHost = hostString.c_str(); string strSub = subString.c_str(); //后面省略······ }
[/align]
结果变成一样了。
请高手解释下,看了下以前的很多帖子,还是有点迷迷糊糊的
[解决办法]确定木有重写string operator=(const string&, const string&)?
[解决办法]strcat(const_cast<char*>(pContact->strPingyinjx.c_str()),buffer);
这句就导致strPingyinjx内存溢出
[解决办法][解决办法]简单地说,string自己管理所需内存,不建议直接访问其内存地址,严禁直接修改其内存空间
strcat(const_cast<char*>(pContact->strPingyinjx.c_str()),buffer);
这条语句中,strcat函数直接修改了strPingyinjx的内存,由此导致从这句之后,strPingyinjx无法正确管理其内存空间
之所以使用c_str()函数可以满足楼主的要求,是因为此时它们都将该内存区域作为C风格字符串处理,访问内存时遇到0结束符为止。但无论如何,内存越界已经造成,虽然常常不出明显问题,一出问题那就是大问题
所以再重复一次,使用std::string或者CString等等自己封装了内存管理的字符串类时,不推荐直接访问字符串内存,严禁直接修改字符串内存