の使用sizeof()
は間違いなく問題です。バッファ自体のサイズではなく、バッファを指すポインタのサイズを指定してデータを送信しています。ポインターのサイズは、32 ビットでは 4、64 ビットでは 8 です。ポインタ サイズではなく、実際のバッファ サイズを使用する必要があります。
演算子を使用する代わりに、代わりにnew[]
VCL のString
クラスを使用する必要があります。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s = MemoEnter->Text;
TcpClient->SendBuf(s.c_str(), ByteLength(s));
LogOut->Lines->Add(s);
}
String
のエイリアスであることに注意してくださいUnicodeString
。受信者がエンコードされたデータを予期していない場合はUTF-16
、データを送信する前に別のエンコードに変換する必要があります。たとえば、次のようになります。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s = MemoEnter->Text;
UTF8String utf8 = s;
TcpClient->SendBuf(utf8.c_str(), utf8.Length());
LogOut->Lines->Add(s);
}
または:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s = MemoEnter->Text;
AnsiString ansi = s; // <-- potential data loss for non-ASCII characters!
TcpClient->SendBuf(ansi.c_str(), ansi.Length());
LogOut->Lines->Add(s);
}
または:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s = MemoEnter->Text;
AnsiStringT<SomeCodePage> ansi = s; // <-- use a suitable codepage to avoid data loss!
TcpClient->SendBuf(ansi.c_str(), ansi.Length());
LogOut->Lines->Add(s);
}