C语言 实现一个内存复制函数,可以将指定内存地址复制指定的长度到另一个内存地址。求看着别太复杂的

C语言 实现一个内存复制函数,可以将指定内存地址复制指定的长度到另一个内存地址。求看着别太复杂的,第1张

你需要的这个函数,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()的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10110242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存