C++ 运行时出现奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:03:58
FunnyString FunnyString::operator*( FunnyString &a )
{
char *p=new char[100];
char *p2=new char[100];
strcpy(p2,a.str);
int length=strlen(str);
for(int n=0;n<length;n++)
{
p[n]=p2[n];
for(int i=0;i<2*length;i++)
{

if((i+1)==(2*n+1)){p[i]=str[n];}
if((i+1)==(2*n+2)){p[i]=p2[n];}
}
}
FunnyString C(p);
return C;
}

int main()
{char *str1=new char[100];
char *str2=new char[100];
cout<<"input:";
cin>>str1>>str2;
FunnyString abc(str1),efg(str2),A,B,C;
C=abc*efg;
C.show();
system("PAUSE");
return EXIT_SUCCESS;
}

上面是出问题的部分的程序
我运行的例如执行abcd dabf
然后它结果竟然会显示adbacbdfME=console

按道理应该没有"ME=conslole"这个的,难道分配的空间后面恰好是这个?但是不应该分配一个空的空间的吗?应该怎么解决这个问题呢?

char *str1=new char[100];
char *str2=new char[100];

系统只负责分配空间给你,不负责初始化。和定义变量不初始化一样,里面的值是随即的东东,只不过在同一台机器上多次运行可能(我说的可能)会分配同一块内存,所以感觉系统给你的空间里面有一个固定的内容。
你可以定一个char szValue[100]; 不初始化,你会发现里面有不可预知的内容。

任何变量在使用前最好先初始化。新分配的空间清零:
方案1:memset(str1,0,100);
方案2:ZeroMemory(str1,100);

分配后的空间并不像JAVA那样会全部初始化为0,而是一些随机值.你的*重载函数里面,最后没有给p加上结束符'\0',adbacbdf后面接的有可能不是0,那么程序会认为字符串没有结束,会一直到有0出现才截止.