想从客户端发送一个结构体对象到服务器。在网上查询后发现可以在客户端用memcpy把结构体拷贝到字符串上发送给客户端,再在客户端把字符串转化为结构体。具体代码如下:
结构体:
typedef struct Player {
char name[20];
char total[5];
}Player;
客户端:
Player p1;
strcpy(p1.name, "wyz");
strcpy(p1.total, "100");
char buffer[25];
memset(buffer, 0, sizeof(buffer));
memcpy(buffer, &p1, sizeof(p1));
send(client_socket, buffer, sizeof(buffer), 0);
服务器:
Player play;
char buffer[25];
memset(buffer, 0, sizeof(buffer));
recv(client_socket, buffer, sizeof(buffer), 0);
memcpy(&play, buffer, sizeof(play));
然后遇到警告:
C6385:从“buffer”中读取的数据无效: 可读大小为“recv()`72”个字节,但可能读取了“25”个字节。
测试发现recv的返回值为25,着实不知道这个72字节哪来的。
网上查询也无果。
突然想尝试下将recv的返回值设置为memcpy的第三个参数会怎么样,于是改进代码:
Player play;
char buffer[25];
memset(buffer, 0, sizeof(buffer));
int x = recv(client_socket, buffer, sizeof(buffer), 0);
memcpy(&play, buffer, x);
然后警告莫名其妙就没了,明明recv的返回值和sizeof(buffer)的值是一样的,都为25,为什么这样写警告就没了呢?
希望有大神能帮忙解答一下。也希望能帮助遇到同样问题的朋友。
PS:用的IDE是VS 2019