C6385:从“buffer”中读取的数据无效: 可读大小为“recv()`72”个字节,但可能读取了“25”个字节。

C++网络编程中接收结构体对象遇到的问题

想从客户端发送一个结构体对象到服务器。在网上查询后发现可以在客户端用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

你可能感兴趣的:(遇到的问题)