char *copyfrom(char *source,int starts,int len)
{
int i;
char *temp=new char[];
memset(temp,0,1);
for (i=starts;i<=len-1;i++)
{
*(temp+i-starts)=*(source+i);
}
//MessageBoxA(0,temp,"copyfrom",MB_OK);
return temp;
}
char *stringreplace(char *source,char *oldsub,char *newsub)
{
char *temp =new char[];
memset(temp,0,1);
strcpy(temp,source);
char *temp1=new char[];
memset(temp1,0,1);
char *temp2;
if (strstr(temp,oldsub)==0x00)
return temp;
while ( (temp2=strstr(temp,oldsub))!=0x00)
{
temp1=copyfrom(temp,0,temp2-temp+1);
strcat(temp1,newsub);
strcpy(temp,temp2+strlen(oldsub));
}
strcat(temp1,temp);
return temp1;
}
还有,老是看见那些帖子说要释放,一个new一个delete,吓得我怕怕.delphi下面管理得很好呀.为什么C++这麽麻烦.是不是真的要手动释放.
对啊,你new出来的东西没有释放!
在程序的结尾加上
delete[] temp;
应该就可以了吧
因为new出来的东西不会自动释放,除非这个进程死掉。
不过看上去好像没什么,但是一旦不释放,就必定会造成内存泄漏。
new方便是方便,可一定要当心啊,也就是说要一个new一个delete。
May you succeed!
mark
你还是用delphi的观念来编程,程序错误很多阿
char *copyfrom(char *source,int starts,int len)
{
if (!len)
{
return NULL;
}
int i;
char *temp=new char[len+1];//需要指定一个长度
memset(temp,0,1); //不需要
for (i=starts;i<=len-1;i++)
{
*(temp+i-starts)=*(source+i);
}
temp[len] = \0; //加上
//MessageBoxA(0,temp,"copyfrom",MB_OK);
return temp;
}
char *stringreplace(char *source,char *oldsub,char *newsub)
{
char *temp =new char[strlen(source) + 1];//修改
//memset(temp,0,1); //不需要
strcpy(temp,source);
char *temp1=new char[1000];//长度不好确定,因为替换后的长度未知,最好是能够用CString
memset(temp1,0,1000);
char *temp2,*temp3;
if (strstr(temp,oldsub)==0x00)
return temp;
while ( (temp2=strstr(temp,oldsub))!=0x00)
{
temp3 =copyfrom(temp,0,temp2-temp);//
strcat(temp1,temp3); //
strcat(temp1,newsub); //
delete[] temp3; //
strcpy(temp,temp2+strlen(oldsub));
}
strcat(temp1,temp);
delete[] temp; //
return temp1;
}
老大,我服了你了,深夜不休息研究学问,向你学习。
new 对应 delete,但是不需要这里new,就在这里delete,可以到别处去delete,你new没有指定长度。
char *copyfrom(char *strDest, const char *source,int starts,int len)
{
assert( strDest!=NULL && source!=NULL);
int i;
char *temp;
temp = strDest;
for (i=0;i<=len-1;i++)
{
(*temp++) = (*source+starts)++;
}
//MessageBoxA(0,temp,"copyfrom",MB_OK);
return temp;
}
另一个也这样改,要把目的串也传进去