模拟实现内存操作函数memcpy、memmove
2017-12-02 00:05
561 查看
1、模拟实现memcpy
memcpy是内存拷贝函数,功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
函数原型为:void *memcpy(void *dest, const void *src, size_t n);
2、模拟实现memmove
memmove是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
函数原型:void memmove( void dest, const void* src, size_t count );
memcpy是内存拷贝函数,功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
函数原型为:void *memcpy(void *dest, const void *src, size_t n);
void *my_memcpy(void *dst, const void *src, size_t count) { void *ret = dst; while (count--){ *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret; } int main() { char arr1[] = "welcome to word"; char arr2[] = "123456"; printf("%s\n",my_memcpy(arr1, arr2, 3)); system("pause"); return 0; }
2、模拟实现memmove
memmove是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
函数原型:void memmove( void dest, const void* src, size_t count );
//1、它的返回值是void*,参数类型也是void*,这样它才可以处理不同类型的数据。 //2、目标dest不能加const,源src加const。原因是我们需要从源src中拷贝数据到dest中,需要对dest进行赋值。若用const保护 //dest,便不能完成赋值操作。 #include<stdio.h> #include<assert.h> void *my_memmove(void *dest, const void *src, size_t count) { void *ret = dest; if (dest <= src || (char *)dest >= ((char *)src + count)) { while (count--) { *(char *)dest = *(char *)src; dest = (char *)dest + 1; src = (char *)src + 1; } } else { dest = (char *)dest + count - 1; src = (char *)src + count - 1; while (count--) { *(char *)dest = *(char *)src; dest = (char *)dest - 1; src = (char *)src - 1; } } return ret; } int main() { char arr1[] = "abcd1234"; char arr2[] = "hello word"; printf("%s\n", my_memmove(arr1, arr2, 5)); system("pause"); return 0; }
相关文章推荐
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 自己实现内存操作函数memset(),memcmp(),memcpy(),memmove()
- 41.内存函数实现(memcpy,memset,memmove,memicmp,memchr.memccpy)
- 【c语言】模拟实现memcpy()、memmove()函数
- C语言模拟实现memcpy,memmove函数
- 模拟实现str类函数和几个内存操作函数
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- c语言内存管理函数,模拟memcpy、memmove(实现内存重叠拷贝)、memset
- 内存操作函数memcpy和memmove
- C语言中内存操作函数 - memcpy ,memmove
- 模拟实现c库函数strcpy,strcat,strstr,strcmp,memcpy,memmove
- day26之模拟实现memcpy和memmove函数
- 模拟实现函数库中的常用函数,1实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove,8实现memset
- 内存操作函数memcpy、memmove
- 内存操作函数memcpy,memccpy,memmove,memchr,memcmp,memicmp,memset
- 模拟实现C库函数strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove
- 模拟实现C库函数:strchr、strcmp、strstr、memcpy和memmove
- 模拟实现memcpy、memmove函数以及二者的区别
- 内存操作函数memcpy,memccpy,memmove,memchr,memcmp,memicmp,memset