我有这个结构:
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
,三个整数的大小和一个指针。它不包括指针指向的数据长度。您要发送的是三个整数和发送机上字符串的地址-当然,该地址对接收机完全没有用。
取而代之的是,您需要准备一个平面缓冲区,该缓冲区将具有紧随字符数据后的三个整数。