已有结构:
struct Frame
{
    int type;
    int length;
    char* data;
};我构造包的方法如下:
char* CompriseFrame(int type, int len, char* data)
{
    Frame oneFrame = new Frame;
    oneFrame.type = type;
    oneFrame.length = len;    oneFrame.data = new char[sizeof(data)];
    memcpy(oneFrame.data, data, sizeof(data));    return reinterpret_cata<char*>(oneFrame);
}
然后再把获得包发出去,请问这样有问题吗?谢谢指点!

解决方案 »

  1.   

    这样发出去的其实是结构的数据。
    结构体的第三个值是一个指针,不是真正的数据。LZ需要把真正的数据data放在这些数据后面;
    或者将char* data; 修改为char data[10000];,要保证能包括数据的最大值才可以。 
      

  2.   

    确实有问题,char* data; 是个指针,内容并不在这个结构体里面。
      

  3.   

    是的,我也觉得问题这里会存在问题,但事先就把大小固定了,我觉得并不是一个十分灵活的解决方案。刚刚想到了一种替代方案,看起来不是很优美:
    char* CompriseFrame(int type, int len, char* data) 

        int totalLen = sizeof(type) + sizeof(len) + sizeof(data);
        char* result = new char[totalLen + 1];
        memcpy(result, htonl(type), sizeof(type));
        memcpy(result + sizeof(type), htonl(len), sizeof(len));
        memcpy(result + sizeof(type) + sizeof(len), data, sizeof(data));
        return result;

      

  4.   


    char *p="hello";
    siezof(p) == 4
    sizeof(data) ---》strlen(data)+1
    否则没有拷贝全数据。
      

  5.   

    你的是个指针,这样的长度是4个字节,系统在发送你的包的时候,永远是12个字节的长度,因此不能包含你的这个数据,所以你的结构是需要向char buf【100】才能够告诉系统你的数据以及长度。
      

  6.   

    Frame oneFrame = new Frame;
    ->
    Frame * oneFrame = new Frame;
      

  7.   

    oneFrame.
    ->
    oneFrame->问题好多啊
      

  8.   

    建议使用固定大小的char数组,操作起来也方便。char*版本需要将sizeof(data)修改为strlen(data),而且,由于你是用的是memcpy,因此,最后还要加上result[totalLen]='\0';