我创建了一个 String 对象,它只包含一个 char* 字符串;成员。我通过将对象中的成员而不是参数的成员复制到 char * 变量中来重载 operator+。但是由于某种原因,当我打印结果时,我得到了大约 16 个添加的乱码字符(转换过载是 100% 好的)。我已将其缩小到 char* sum = new char[length] 这就是问题所在。我检查了 strlen(sum),它显示等于 22,而它应该是 6 个字母长。任何人都知道问题可能是什么?
String String::operator+(const String& rhs)
{
int length = strlen(string) + strlen(rhs.string);
char* sum = new char[length];
for(int i=0;i<strlen(string);i++)
sum[i] = string[i];
for(int i=0;i<strlen(rhs.string);i++)
sum[strlen(string) +i] = rhs.string[i];
String s(sum);
return s;
}
编辑:现在乱码消失了,但我的结果仍然有 =,例如:“1”+“2”+“3”现在是“1=2=3”。这是空终止符解释错误的结果吗?
再次编辑:没关系,真的很糟糕并设置 [length+1] = '\0' 而不是 [length]。再次感谢您的精彩回答!