我正在尝试将我的缓冲区复制到另一个缓冲区但我无法获得实际值。
以下是我的计划流程: 1.创建随机整数 2.将其转换为char 3.将它们存放在STL容器中 4.从容器中检索第一个元素 5.将其转换为int形式
这是我的头文件:
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;
这是我的cpp文件:
仅考虑步骤#4和#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);
}
这是我的输出:
m_RecvBuffer1 [1](0x0034feb8 {m_BufferData=0x0034bc28 "45" m_Size=4 })
BufferSource1 0x0034bca8 "(¼4" char *
现在您可以看到我的BufferSource1变为(¼4
。它应该以{{1}}形式显示45。我该如何解决?请帮忙。
谢谢。
答案 0 :(得分:4)
改变这个:
memcpy(BufferSource1, *IterBuffer1, BUFFER_SIZE);
到此:
memcpy(BufferSource1, (*IterBuffer1)->m_BufferData, (*IterBuffer1)->m_Size);
因为 m_RecvBuffer1 的类型是std::vector<BufferData*>
,而不是std::vector<char*>
。
为其他人做同样的改变!