【发布时间】:2011-04-26 23:34:15
【问题描述】:
我正在尝试使用memcpy 创建一个数据包。我希望在pOutBuffer 中看到输出,其前四个字节将有 999,然后是 111,然后是 12;但目前我得到了一些垃圾。
我认为问题在于,它不是复制值,而是复制地址。如何将这些值复制到连续内存中,以便将其写入磁盘并使用我定义的格式在接收端检索数据?
谢谢。
#include "stdafx.h"
#include "windows.h"
typedef struct
{
int Begin;
int End;
int Size;
}PACKET;
void AddBuffer(PACKET* pPacket, BYTE* pOutBuffer)
{
memcpy(pOutBuffer, &pPacket->Begin, sizeof(int));
memcpy(pOutBuffer+sizeof(int), &pPacket->End, sizeof(int));
memcpy(pOutBuffer+sizeof(int)+sizeof(int), &pPacket->Size, sizeof(int));
}
int _tmain(int argc, _TCHAR* argv[])
{
PACKET* pPacket = new PACKET;
pPacket->Begin = 999;
pPacket->End = 111;
pPacket->Size = 12;
BYTE* pOutBuffer = new BYTE [pPacket->Size];
AddBuffer(pPacket, pOutBuffer);
//Write pOutBuffer on to the disk
//WriteFile(vhFileToWrite,(BYTE*)pOutBuffer,pPacket.Size,&vRetFileSize,NULL);
//Delete pOutBuffer
return 0;
}
源示例已更新。现在可以正常构建了
【问题讨论】:
-
你确定这段代码还能编译吗?我很确定那里有语法错误。
-
那不会编译,你正在访问一个带有
.的指针。 -
这还能编译吗?
&pPacket.Begin看起来不对,因为pPacket是一个指针。 -
我根据我的大项目写了这个简单的sn-p。
-
@Guy, e7 03 00 00 6f 00 00 00 0c 00 00 00,是输出:它工作正常。我不知道我为什么问这个问题。
标签: c++ c visual-studio visual-c++ memcpy