CopyMemory的问题。不是高手就不用进来了。
pp616 2001-12-08 12:06:36 我的程序是这样的。
服务器端发送一个字符串长度为318个字节
然后在客户端接收下来。之后将其存放在一个我定义的数据类型中。
我的服务端段没问题。问题在客户端。
我的代码是这样的。
myudp.h中定义了一个我的数据类型:
struct SZ_DATA
{
char Falg[2];
char SeekLen[7];
char Name[6];
char CName[8];
char YesterdayP[9];
char TodayStartP[9];
char NowP[9];
char Valuem[12];
char ValuemP[17];
char BargainNO[9];
char HeightBargainP[9];
char LowBargainP[9];
char SYL1[7];
char SYL2[7];
char PUpDown1[9];
char PUpDwon2[9];
char HYCCL_Bak[12];
char PP4[9];
char PValuem4[12];
char PP3[9];
char PValuem3[12];
char PP2[9];
char PValuem2[12];
char PP1[9];
char PValuem1[12];
char BP1[9];
char BValuem1[12];
char BP2[9];
char BValuem2[12];
char BP3[9];
char BValuem3[12];
char BP4[9];
char BValuem4[12];
}SZDATA;
然后在myudp.cpp中我这样做的:
void __fastcall TForm1::udpacceptDataReceived(TComponent *Sender,
int NumberBytes, AnsiString FromIP, int Port)
{
static char *buf;
buf=new char[NumberBytes];
FillMemory(buf,NumberBytes,0);
FillMemory(&SZDATA,sizeof(SZDATA),0);
//将接收到的数据存入buf
udpaccept->ReadBuffer(buf,NumberBytes,NumberBytes);
//直接拷贝内存块到我的数据类型中
CopyMemory(&SZDATA,buf,sizeof(SZDATA));
ShowMessage(SZDATA.Falg);
delete buf;
}
///////////////////////////////////////////////////////////////
但是在ShowMessage(SZDATA.Falg)的结果并非接收到的数据的头两个字节,而是整个接收到的数据,而ShowMessage(SZDATA.SeekLen)的结果是接收到的数据的第3个字节到最后一个字节。为什么会这样呢。我明明已经定义好了char Falg[2]这只有两个字节啊怎么会把所有的数据都放在了里面呢???
还望高手能指点一二。小弟感激不尽!!!!!