memcpy函数浅析

来源:互联网 发布:单片机总线 编辑:程序博客网 时间:2024/06/06 02:09

函数原型:void *memcpy(void*dest, const void *src, size_t n);

用法:#include<string.h>

功能:从源src所指的内存地址的起始位置开始,拷贝n个字节的数据到目标dest所指的内存地址的起始位置中。

说明:

1)src和dest所指内存区域不能重叠,函数返回指向dest的指针。如果src和dest以任何形式出现了重叠,它的结果是未定义的。

2)与strcpy相比,memcpy遇到’\0’不结束,而且一定会复制完n个字节。只要保证src开始有n字节的有效数据,dest开始有n字节内存空间就行。

3)如果目标数组本身已有数据,执行memcpy之后,将覆盖原有数据(最多覆盖n个)。

如果要追加数据,则每次执行memcpy()后,要将目标地址增加到要追加数据的地址。

4)source和destin都不一定是数组,任意的可读写的空间均可。

实现memcpy库函数:

[cpp] view plain copy
  1. #include <iostream>  
  2. #include <stdio.h>  
  3. #include <string.h>  
  4. #include <stdlib.h>  
  5. using namespace std;  
  6. void *memory(void *dst,const void *src,size_t s)  
  7. {  
  8.    const char* psrc=static_cast<const char*>(src);  
  9.     char* pdst=static_cast<char*>(dst);  
  10.   
  11.     if(psrc==NULL||pdst==NULL)  
  12.         return NULL;  
  13.   
  14.     if(pdst>psrc&&pdst<(psrc+s))  
  15.     {  
  16.         for(size_t i=s-1;i!=-1;i--)  
  17.             pdst[i]=psrc[i];  
  18.     }  
  19.     else  
  20.     {  
  21.         for(size_t i=0;i<s;++i)  
  22.             pdst[i]=psrc[i];  
  23.     }  
  24.     return dst;  
  25. }  
  26. int main()  
  27. {  
  28.    char buf[100]="abcdefghijk";  
  29.    memory(buf+2,buf,5);  
  30.    printf("%s\n",buf+2);  
  31.    return 0;  
  32. }  
则输出为abcdehijk。
原创粉丝点击