strcpy / strcat奇怪的字符输出

时间:2012-10-25 22:10:23

标签: c++ operator-overloading

我有一个自定义String类的以下代码:

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;
}

其中sPtrchar*

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

 ]√Hâ«Ö“x˘" = "The date is" + " August 1, 1993

我一点都不知道发生了什么。我已经阅读了几个在结果字符串连接之前得到垃圾字符的人的推荐信,但我完全不明白为什么整个字符串都是垃圾字符。

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

1 个答案:

答案 0 :(得分:4)

不要通过引用返回“临时”对象。函数结束后,临时字符串被解除分配,并且由于字符串被设置为temps地址,因此它变为垃圾。