中国开发网: 论坛: 程序员情感CBD: 贴子 353361
haitao
找到一个,会重新分配内存的。。。其实我不需要重新分配内存,原来的空间就是非常大的,所以希望直接在上面搬移。。。
LPTSTR StrReplaceStr(LPTSTR src,LPTSTR strFind,LPTSTR strReplace)
{
if(strlen(src)==0) return src;
if(strlen(strFind)==0) return src;
SafeBuffer sWrkStr(10240); // 一个类,自动分配和释放内存
LPTSTR pNew = src;
LPTSTR pOld = src;
int nSize = 0;
int nAddSize = 0;
int nOldSize = strlen(strFind);
int nRepSize = strlen(strReplace);
while((pNew = strstr(pOld,strFind))!=NULL)
{
nAddSize = pNew - pOld;
if(nSize + nAddSize + nRepSize > sWrkStr.GetLength())
{
// 替换后空间超出原空间,则重新分配内存
sWrkStr.GetBufferSetLength((nSize + nAddSize + nRepSize)<<1); // x2
}
strncpy(sWrkStr + nSize , pOld, nAddSize);
strncpy(sWrkStr + nSize + nAddSize, strReplace, nRepSize);
nSize = nSize + nAddSize + nRepSize;
pOld += nOldSize + nAddSize;
}
if(pNew==NULL) // 曾经替换过,处理剩余的数据
{
* (sWrkStr + nSize) = 0;
strcat(sWrkStr,pOld);
strcpy(src,sWrkStr);
}
return src;
}
我的blog:http://szhaitao.blog.hexun.com & http://www.hoolee.com/user/haitao
--以上均为泛泛之谈--
不尽牛人滚滚来,无边硬伤纷纷现 人在江湖(出来的),哪能不挨刀(总归是要的)
网络对话,歧义纷生;你以为明白了对方的话,其实呢?

您所在的IP暂时不能使用低版本的QQ,请到:http://im.qq.com/下载安装最新版的QQ,感谢您对QQ的支持和使用

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录