请大家看看这段代码删除重复的字符串的有什么问题吗?为什么总是报错呢?
我看是memset不应该清零。去掉确实又ok了。谁能解释下嘛?谢谢。
void delDup()
{
char *dd = new char[strlen(s1)+1];
memset(dd,0,strlen(dd));
char *d2 = dd;
char *ss1 = s1;
while(*ss1)
{
char *d1 = dd;
while(*d1)
{
if(*ss1 == *d1)
{
d1 = NULL;
break;
}
d1++;
}
if(d1)
{
*d2++=*ss1;
}
ss1++;
}
d2 = dd;
while(*d2)
d2++;
*d2='\0';
int z = strlen(dd);
s2 = new char[z+1];
strcpy(s2,dd);
delete[] dd;
};
------解决方案--------------------------------------------------------
开头部分就有问题.
char *dd = new char[strlen(s1)+1];
//strlen(dd)错了. dd刚刚分配, 未初始化, strlen期望传入一个'\0'结尾的字符串, 否则....
//另外, 最好把strlen(s1)记录下来, menset(dd, 0, size+1), 最好一个byte也要置0
memset(dd,0,strlen(dd));