模拟实现内存操作函数

内存操作函数:
头文件#include<string.h>

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

函数功能:从源src所指的内存地址的起始位置

开始拷贝n个字节到目标dest所指的内存 地址的起始位置中。src和dest所指内存区域不能重叠。函数返回指向dest的指针。

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

代码实现:

 1 void*my_memcopy(void*dest, const void*src, size_t size)
 2 {
 3     char*pdest = (char*)dest;
 4     const    char* psrc = (const char*)src;
 5         while (size--)
 6         {
 7             *pdest = *psrc;
 8             pdest++;
 9             psrc++;
10         }
11 
12     return dest;
13 }

 

2、memmove
函数原型:void *memmove( void* dest, const void* src,size_t size );
函数功能:由src所指内存区域复制size个字节到dest所指内存区域。
如果dest所指内存区域和src所指内存区域有重叠,
memmove能够保证src所指内存区域的内容在被覆盖之前将重叠、
区域的字节拷贝到dest所指内存区域中。
当dest所指内存区域和src所指内存区域没有重叠,则和memcpy函数功能相同。

 memmove的拷贝分为以下几种情况:

 

代码实现:

 1 void* my_memmove(void* dest, const void* src,size_t size)
 2 {
 3     char*pdest = (char*)dest;
 4   const    char* psrc = (const char*)src;
 5   if (pdest > psrc&&pdest < psrc + size)
 6   {
 7       while (size--) //从后往前进行拷贝
 8       {
 9           *(pdest + size) = *(psrc + size);
10       }
11 
12   }
13   else
14   {
15       while (size--) //从前往后进行拷贝
16       {
17           *pdest++ = *psrc++;
18       }
19   }
20   return dest;
21 }

 


3.memset
函数原型:void *memset(void *dest,int c,size_t size);
函数功能 将dest所指内存区域前size个字节赋值为字符c。

代码实现:

1 void* my_memset(void* dest, int c, size_t size)
2 {
3     char* pdest = (char*)dest;
4     while (size--)
5     {
6         *pdest++ = c;
7     }
8     return dest;
9 }

 

posted @ 2017-01-13 12:40  xmc_2022  阅读(298)  评论(0编辑  收藏  举报