我有这个结构:

typedef struct pkt {
    unsigned int        pktid;
    unsigned int        pkt_leng;
    unsigned int        strleng;
    char*           str;
};


在我的代码中,我正在这样做:

mystring = someFunctionWhoReturnString();

pkt* mypkt = (pkt*) malloc(sizeof(pkt));

mypkt -> pkt                    = htonl(C_MYPKT);
mypkt -> pkt_leng               = htonl(sizeof(pkt));
mpykt -> strleng                = htonl(mystring.lengh());

mypkt -> str = (char*)malloc(mystring.length());
strcpy(mypkt -> str, mystring.c_str(), mystring.length());


之后,如果我检查mypkt-> str中存储了什么,则字符串在那里。

但是,当我收到pkt时,我只得到一些垃圾(大小合适),该垃圾应该在这里获取char *(数据包中的其余数据可以到达)。

有一些聪明的方法可以在不使用具有静态大小的char []的情况下完成此任务?

我正在VC ++ 2010上工作。

最佳答案

实现sizeof(pkt) == 12,三个整数的大小和一个指针。它不包括指针指向的数据长度。您要发送的是三个整数和发送机上字符串的地址-当然,该地址对接收机完全没有用。

取而代之的是,您需要准备一个平面缓冲区,该缓冲区将具有紧随字符数据后的三个整数。

09-09 19:46