1

カスタム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;
}

はどこsPtrですかchar*

しかし、この関数を 2 つの文字列に対して実行すると、結果として次のような文字化けが発生します。

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

何が起こっているのか少しもわかりません。結果の文字列が連結される前に文字化けが発生した人の証言をいくつか読みましたが、文字列全体が文字化けになる理由がまったくわかりません。

どんな助けでも本当に素晴らしいでしょう。前もって感謝します!

4

1 に答える 1

4

「一時的」な参照によってオブジェクトを返さないでください。関数が終了すると、一時文字列の割り当てが解除され、文字列が一時アドレスに設定されるため、ガベージになります。

于 2012-10-25T22:16:46.803 に答える