私はデータ ネットワーク クラスのプロジェクトに取り組んでおり、次のようなヘッダーを連結するように求められます。
struct ip
{
unsigned long a;
unsigned long b;
unsigned int l;
} IP;
そして、それが char* であるメッセージは、「こんにちは」と言ってみましょう。
したがって、このメソッドを使用して、これら 2 つを 1 つの 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 は少なくともそれ以上であるべきではありませんか?
私が自分自身を明確にしたことを願っています。誰かがこれをもう少しうまく説明できるかもしれません。
ありがとう