プラス記号をオーバーロードして2つの文字列を連結しようとしていますが、エラーが発生し続けます。
VS 2010は、アサーションに失敗したメッセージを表示します: "式:(L"バッファが小さすぎます"&& 0)"; ファイル: f:\ dd \ vctools \ crt_bld \ self_x86 \ crt \ src \ tcscat_s.inl; 行: 42。
私のコードの何が間違っていると思いますか?
#include "stdafx.h"
class MyString{
int l; // the length of the array pointed by buf
char *buf; //pointer to a char array
public:
...
MyString(char *);
friend MyString operator+(MyString &,MyString &);
...
};
MyString::MyString(char *p)
{
buf=new char[strlen(p)+1];
strcpy_s(buf,strlen(p)+1,p);
l=strlen(p)+1;
}
MyString operator+(const MyString &a,const MyString &b)
{
MyString result("");
result.l=a.l+b.l;
delete[] result.buf;
result.buf=new char[result.l+1];
result.buf[0]='\0';
strcat_s(result.buf,result.l+1,a.buf);
strcat_s(result.buf,result.l+1,b.buf);
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
MyString a("hello"),b("world"),c("");
c=a+b;
system("pause");
return 0;
}
今は動作します!みんなありがとう!