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码中的黑桃这是为什么?有什么方法能解决?

解决方案 »

  1.   

    student 结构体中 name 是一个字符串指针,指向字符串的是结构体之外的内存区域send(client,(char*)&st,sizeof(st),0);
    这一句只传了name指针,这个指针在服务器端对应的可能是未知内存空间的某处把name改成字符串数组可以解决这个问题
    struct student{
    int  id;
    char name[32];
    };
      

  2.   

    数据格式就是char*的。。把它与结构体分开传能传。。
    但是我想一次传不知道有什么方法
      

  3.   

    这需要所谓的“串行化”技术。指针是不允许跨进程(更不用说跨机器)使用的,你那种方式等于把一个指针传过去,自然不行。
    这种结构,应该把那个char*特别处理,发送时先发字符串的长度,然后再发字符串内容。而接受时则先接受长度,然后根据长度分配内存,然后再向分配的内存内接受其内容
      

  4.   

    struct student{
    int id;
    char name[32];
    };这种方式是因为并没有引用识别不了的数据。第一种方式,接收端是无法识别name的,因为它指向的是另外一个进程中(发送端)的内存块。
      

  5.   

    lz可以温习下C教科书的指针部分
    其实很简单就是一个是传了指针变量的值(结构中的char* name) 一个是传的内容 
    struct xx{
    int x;
    char* y;
    }xxx;
    当你&xxx 数据就是x的四个字节和y的值(而非指向的东西,因为你没有*y啊)而你char name[10];
    这个name里面的字符本身就是结构中数据的一部分,所以正常