关于缓冲区的问题,急!!

zhyuanbaron 2005-07-06 04:53:17
我定义了
DATA_BUFFER 结构体用于存放数据
PACKET_HEAD 结构体来给数据添加通信包头
想把这两个结构体都 copy 到发送缓冲区 SendBuf 中通过 socket 发送,但不知道怎么把两部分接上啊??
用 memcpy 是不是从头开始copy??能连着用两次把包头和包体接上吗?

另外:缓冲区通常设置成什么类型的?BYTE VOID 还是其他什么??这个类型与里面存放的数据有什么关系吗?

我很菜的,请大家帮帮忙啊!最好有代码
...全文
161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2005-07-09
  • 打赏
  • 举报
回复
char buffer[MAX_BUFFER_SIZE];
memcpy(buffer,head,sizeof(PACKET_HEAD));
buffer += sizeof(PACKET_HEAD);
memcpy(buffer,data,sizeof(DATA_BUFFER));
========================================
buffer += sizeof(PACKET_HEAD);//错误代码,逻辑错误,buffer是buffer数组的头指针,若将该指针移动了,那么该数组将失去数组的意义,在此例当中将有可能会有sizeof(PACKET_HEAD)大小的内存失去管理,极其不符合逻辑。
zhyuanbaron 2005-07-09
  • 打赏
  • 举报
回复
如果这样定义那??
char buffer[MAX_BUFFER_SIZE];
memcpy(buffer,head,sizeof(PACKET_HEAD));
buffer += sizeof(PACKET_HEAD);
memcpy(buffer,data,sizeof(DATA_BUFFER));


buffer 是 char 类型的,head 是 PACKET_HEAD 类型的
要是不强制转换,就按上面的memcpy那样来做会不会有问题啊??
clockwise3 2005-07-09
  • 打赏
  • 举报
回复
ps:
缓冲区申明成什么类型不是关键的,只是分配的时候大小不同,如果你知道你存了什么东西直接强制转换
clockwise3 2005-07-09
  • 打赏
  • 举报
回复
DATA_BUFFER *data = new DATA_BUFFER ;
PACKET_HEAD *head = new PACKET_HEAD;
char *buffer = (char*)malloc(sizeof(DATA_BUFFER )+sizeof(PACKET_HEAD ));
memcpy(buffer,head,sizeof(PACKET_HEAD));
buffer += sizeof(PACKET_HEAD);
memcpy(buffer,data,sizeof(BUFFER));

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧