char* 文字列のみを含む String オブジェクトを作成しました。メンバー。パラメーターのメンバーではなくオブジェクトからメンバーを両方とも char * 変数にコピーすることにより、operator+ をオーバーロードしています。しかし、なんらかの理由で、結果を印刷すると、約 16 個の意味不明な文字が追加されます (キャストのオーバーロードは 100% 正常です)。問題である char* sum = new char[length] に絞り込みました。strlen(sum) を確認したところ、6 文字の長さであるはずの 22 に等しいことがわかりました。誰が問題が何であるかの手がかりを持っていますか?
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」になります。これは null ターミネータが間違って解釈された結果ですか?
もう一度編集してください。すばらしい回答をありがとうございます。