你需要的这个函数,C语言本来就有:memcpy
void memcpy(void dest, const void src, size_t n);
函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
举个例子:将s中的字符串复制到字符数组d中。
#include<stdioh>#include<stringh>
int main()
{
chars="GoldenGlobalView";
chard[20];
memcpy(d,s,(strlen(s)+1));
printf("%s",d);
getchar();
return0;
}
猜你想是把hv_PointerBlue中的内容拷贝到b_data中吧?memcpy函数原型是这样的:
void memcpy(void dest, const void src, size_t n);第一个参数是目标地址指针,第二个参数是源地址指针,你应该是把参数顺序搞反了
void memcpy(void dest, const void src, size_t n);
就是把以src指向地址为起始地址连续n个字节的数据复制到dest指向地址为起始地址连续n个字节的空间内。
如果连续调用memcpy但dest参数指向的地址不变的话,那当然就是覆盖数据了。
如果好追加数据,那么每次执行memcpy后要把dest的地址增加到你要追加数据的地址。
你的代码可以改为(请自己保证给data分配足够的存储空间):
int m=0;
while (1)
{
byte t= new byte[0x1000];//循环一次接收的数据
int n = sockClientReceive(t, 0x1000);
if (n == 0)
{
break; //接收完毕退出
}
memcpy(data+m0x1000, t, n);//把收到的数据写入data
m++;
}
就是问-5的作用吗?这个很简单啊。
Fake_FindWindow是你用来替代系统FindWindowA的函数,那么SubPtr(AddressOf Fake_FindWindow)就是这个函数的地址,FunAddr是系统FindWindowA函数的地址。
你的NewCode(0)是&HE9,这是个跳转指令,后面接4个字节表示跳转的位置(相对跳转)。也就是说,如果目前指令地址是&H12345600,&HE9后面跟的值是&H00000078的话,执行完&HE9这条指令后就会跳转到&H12345678的位置继续执行。
放到你的代码里面,也就是让FunAddr的第一条指令执行&HE9跳转,并跳转到Fake_FindWindow函数的起始处。-5就是减去&HE9 xxxxxxxx这5个字节,你想像一下函数内存布局就清楚了,特别注意(相对)两个字。
以上就是关于C语言 实现一个内存复制函数,可以将指定内存地址复制指定的长度到另一个内存地址。求看着别太复杂的全部的内容,包括:C语言 实现一个内存复制函数,可以将指定内存地址复制指定的长度到另一个内存地址。求看着别太复杂的、(C++)这个地址该怎么分啊、关于memcpy()的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)