2 回答
TA贡献1868条经验 获得超4个赞
void *memcpy(void *dest, const void *src, size_t n);
就是把以src指向地址为起始地址连续n个字节的数据复制到dest指向地址为起始地址连续n个字节的空间内。
如果连续调用memcpy但dest参数指向的地址不变的话,那当然就是覆盖数据了。
如果好追加数据,那么每次执行memcpy后要把dest的地址增加到你要追加数据的地址。
你的代码可以改为(请自己保证给data分配足够的存储空间):
int m=0;
while (1)
{
byte *t= new byte[0x1000];//循环一次接收的数据
int n = sockClient.Receive(t, 0x1000);
if (n == 0)
{
break; //接收完毕退出
}
memcpy(data+m*0x1000, t, n);//把收到的数据写入data
m++;
}
TA贡献1789条经验 获得超8个赞
memcpy(data, t, n);//把收到的数据写入data
这行有问题,应该先定义一个接受长度变量:
int nHaveReceive = 0;(定义在while前)
下面再修改为:
memcpy(data+nHaveReceive, t, n);//把收到的数据写入data
nHaveReceive += n;
这样就可以了。
另外你定义了一个:
byte *t= new byte[0x1000];//循环一次接收的数据
来放置一次接受的字符串,t并没有释放,这样是很不规范的,也完全没有必要,我给你写个最简单的代码吧:
int dataLength;// 要接收文件的长度
sockClient.Receive(&dataLength, 4);// 接收文件的长度信息
byte *data = new byte[dataLength];//存放接收的文件
....
byte*pbuffer = data;
while (1)
{
int n = sockClient.Receive(pbuffer,0x1000);
if (n == 0)
{
break; //接收完毕退出
}
pbuffer+= n;
}
添加回答
举报