Reputation: 337
I'm trying to get my buffer copied into another buffer but I cant get the actual value.
Here is how my program flows: 1. Create random integers 2. Convert it into char 3. Store them into STL container 4. Retrieve first element from the container 5. Convert it into int form
Here is my header file:
struct BufferData
{
char *m_BufferData;
int m_Size;
};
private:
typedef std::vector<BufferData *>BufferVector;
BufferVector m_RecvBuffer1, m_RecvBuffer2, m_RecvBuffer3;
typedef std::vector<BufferData *>::iterator BufferVectorIterator;
BufferVectorIterator IterBuffer1, IterBuffer2, IterBuffer3;
And here is my cpp file:
Consider only step #4 and #5.
void CUdpSocket::GetEachBuffer(char *BufferSource1, char *BufferSource2, char *BufferSource3)
{
if(!m_RecvBuffer1.empty())
{
IterBuffer1 = m_RecvBuffer1.begin();
memcpy(BufferSource1, *IterBuffer1, BUFFER_SIZE);
m_RecvBuffer1.erase(IterBuffer1);
}
else
memcpy(BufferSource1, 0, BUFFER_SIZE);
if(!m_RecvBuffer2.empty())
{
IterBuffer2 = m_RecvBuffer2.begin();
memcpy(BufferSource2, *IterBuffer2, BUFFER_SIZE);
m_RecvBuffer2.erase(IterBuffer2);
}
else
memcpy(BufferSource2, 0, BUFFER_SIZE);
if(!m_RecvBuffer3.empty())
{
IterBuffer3 = m_RecvBuffer3.begin();
memcpy(BufferSource3, *IterBuffer3, BUFFER_SIZE);
m_RecvBuffer3.erase(IterBuffer3);
}
else
memcpy(BufferSource3, 0, BUFFER_SIZE);
}
Here is my output:
m_RecvBuffer1 [1](0x0034feb8 {m_BufferData=0x0034bc28 "45" m_Size=4 })
BufferSource1 0x0034bca8 "(¼4" char *
Now as you can see my BufferSource1 become (¼4
. It should display 45 in char
form instead. How do I fix this? Please help.
Thank you.
Upvotes: 0
Views: 171
Reputation: 361402
Change this:
memcpy(BufferSource1, *IterBuffer1, BUFFER_SIZE);
to this:
memcpy(BufferSource1, (*IterBuffer1)->m_BufferData, (*IterBuffer1)->m_Size);
Because the type of m_RecvBuffer1 is std::vector<BufferData*>
, not std::vector<char*>
.
Change similarly for others!
Upvotes: 4