【发布时间】:2012-09-19 03:04:15
【问题描述】:
我一直在为我的数据网络课程工作,他们要求我连接这样的标题:
struct ip
{
unsigned long a;
unsigned long b;
unsigned int l;
} IP;
还有一条消息,它是一个字符*,让我们说“你好”。
所以,我使用这种方法将这两个连接到一个 char* 中:
memcpy(sendBuf, (void*)&sendHeader, sizeof(sendHeader));
memcpy(&sendBuf[sizeof(sendHeader)], readMessage, lengthMessage);
其中lengthMessage 是消息的字符数+1,它是空终止字符。
所以,sendBuf 是这样定义的:
char sendBuf[BUFLEN + 1] // BUF_LEN = 128
然后我把这个 char* 放到一个这样定义的队列中:
concurrency::concurrent_queue<char*> IP_in_queue;
所以,我想检查信息是否正确,所以我只是检查所有内容:
char* s;
IP_in_queue.try_pop(s);
numbytes = sizeof(s);
// Copy from buf to the header
memcpy( (void*)&readHeader, s, sizeof( IP_PACKET_HEADER_T));
// Copy message part
memcpy( sendedString, &s[sizeof(IP_PACKET_HEADER_T)], numbytes - sizeof(IP_PACKET_HEADER_T));
// Append \0 to the end
sendedString[numbytes - sizeof(IP_PACKET_HEADER_T)] = '\0';
所以,在我排队我的 char* 之前,我们知道 sendBuf 的大小是 129,但是当我检查出队后的字节数时,它的差异太大了,字节数的值是 4,但即使在这样我得到的信息是正确的,所以我不明白,也许我错过了一些重要的东西,但变量 numbytes 至少不应该更多?
我希望我说清楚了,也许有人可以更好地解释一下。
谢谢
【问题讨论】: