C++ strcpy/strcat奇怪字符输出

C++ strcpy/strcat奇怪字符输出,c++,operator-overloading,C++,Operator Overloading,对于自定义字符串类,我有以下代码: const String &String::operator+(const String &right) { String temp; temp.length = length + right.length; temp.sPtr = new char [temp.length + 1]; assert( sPtr != 0 ); strcpy(temp.sPtr, sPtr); strcat(temp.sPt

对于自定义
字符串
类,我有以下代码:

const String &String::operator+(const String &right)
{
   String temp;
   temp.length = length + right.length;
   temp.sPtr = new char [temp.length + 1];
   assert( sPtr != 0 );
   strcpy(temp.sPtr, sPtr);
   strcat(temp.sPtr, right.sPtr);
   return temp;
}
其中,
sPtr
是一个
char*

但是,当我在两个字符串上执行此函数时,会得到垃圾字符,如下所示:

 ]√Hâ«Ö“x˘" = "The date is" + " August 1, 1993
我一点也不知道发生了什么事。我读过一些人的推荐信,他们在连接结果字符串之前就已经得到了垃圾字符,但我完全不明白为什么整个字符串都是垃圾字符


任何帮助都会非常好。提前谢谢

不要通过引用返回“临时”对象。函数结束后,临时字符串将被取消分配,由于该字符串被设置为临时地址,它将成为垃圾。

不要通过引用返回“临时”对象。函数结束后,临时字符串将被取消分配,由于该字符串被设置为临时地址,它将成为垃圾。

您通过引用返回了一个本地对象。不要那样做。从返回类型中删除(&D)。谢谢你,其他Benjamin!本杰明·科瓦奇:我不是贝哈明,但无论如何我会加上我的2美分:现在你必须确保你遵守“三分法则”@BenjaminKovach我不建议在这里使用strcat/strcpy,毕竟您要为字符串存储一个内部长度,所以在进行内存复制时使用它,而不是依赖于空终止。哦,顺便说一句,我是第三个Benjamin。您通过引用返回了一个本地对象。不要那样做。从返回类型中删除(&D)。谢谢你,其他Benjamin!本杰明·科瓦奇:我不是贝哈明,但无论如何我会加上我的2美分:现在你必须确保你遵守“三分法则”@BenjaminKovach我不建议在这里使用strcat/strcpy,毕竟您要为字符串存储一个内部长度,所以在进行内存复制时使用它,而不是依赖空终止。哦,顺便说一下,我是第三个Benjamin。