TCP/IP 压包数据问题。

client中定义 data_len = recv_packet.head_union.head.total_length -NET_PACKET_HEAD_LEN ; net_pack.pdata= new char[data_len];

用memcpy(net_pack.p_data,recv_packet.p_data,data_len)。

打印recv_packet.p_data得到的值是正确回传的,但是通过memcpy复制到net_pack.p_data的值总是会在后面加随机字符。

 

问题可能出现在字符数组 net_pack.p_data 的内存分配和复制过程中。在 client 中,你通过 new 运算符为 net_pack.p_data 分配了内存,然后使用 memcpyrecv_packet.p_data 的数据复制到 net_pack.p_data。然而,你提到复制后的值总是在末尾加上随机字符。

 

以下是可能的修复方法:

// 分配足够的内存来容纳 data_len 个字符,包括 null 终止符
net_pack.p_data = new char[data_len + 1];

// 复制数据,并在末尾添加 null 终止符
memcpy(net_pack.p_data, recv_packet.p_data, data_len);
net_pack.p_data[data_len] = '\0';

// 打印复制后的值
std::cout << net_pack.p_data << std::endl;

posted @ 2023-05-24 08:53  trojantao  阅读(15)  评论(0编辑  收藏  举报