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
分配了内存,然后使用 memcpy
将 recv_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;