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。