struct student{
int id;
char *name;
}客户端
student st;
send(client,(char*)&st,sizeof(st),0);服务器端
student st;
recv(server,(char*)&st,sizeof(st),0);
接收后的st的name永远都是ASCII码中的黑桃这是为什么?有什么方法能解决?
int id;
char *name;
}客户端
student st;
send(client,(char*)&st,sizeof(st),0);服务器端
student st;
recv(server,(char*)&st,sizeof(st),0);
接收后的st的name永远都是ASCII码中的黑桃这是为什么?有什么方法能解决?
这一句只传了name指针,这个指针在服务器端对应的可能是未知内存空间的某处把name改成字符串数组可以解决这个问题
struct student{
int id;
char name[32];
};
但是我想一次传不知道有什么方法
这种结构,应该把那个char*特别处理,发送时先发字符串的长度,然后再发字符串内容。而接受时则先接受长度,然后根据长度分配内存,然后再向分配的内存内接受其内容
int id;
char name[32];
};这种方式是因为并没有引用识别不了的数据。第一种方式,接收端是无法识别name的,因为它指向的是另外一个进程中(发送端)的内存块。
其实很简单就是一个是传了指针变量的值(结构中的char* name) 一个是传的内容
struct xx{
int x;
char* y;
}xxx;
当你&xxx 数据就是x的四个字节和y的值(而非指向的东西,因为你没有*y啊)而你char name[10];
这个name里面的字符本身就是结构中数据的一部分,所以正常