C语言 memmove函数实现
2016-11-16 22:12
246 查看
memmove函数和memcpy函数作用一样,但memmove可以解决内存重叠问题,memcpy没有办法,实现my_memmove(str1+1,str1,strlen(str1)+1)时后面地址小于前面地址,从后往前copy,相反从前往后copy,这样就解决了内存重叠的问题
void *my_memmove(void *dest, void *src ,size_t n) { void *ret=dest; assert(dest!=NULL && src!=NULL); if (dest<=src || (char *)dest >= ((char *)src+n)) { while (n--) { *(char *)dest=*(char *)src; dest =(char *)dest+1; src =(char *)src+1; } } else { src=(char *)src+n-1; dest=(char *)dest+n-1; while (n--) { *(char *)dest=*(char *)src; dest =(char *)dest-1; src =(char *)src-1; } } return ret; } int main() { char str1[20]="today is good"; char *p= (char *)my_memmove(str1+1,str1,strlen(str1)+1); printf("%s\n",p); return 0; }
memmove函数和memcpy函数作用一样,但memmove可以解决内存重叠问题,memcpy没有办法,实现my_memmove(str1+1,str1,strlen(str1)+1)时后面地址小于前面地址,从后往前copy,相反从前往后copy,这样就解决了内存重叠的问题
相关文章推荐
- 【C语言】memcpy函数和memmove函数的实现与区别
- 【c语言】模拟实现memcpy()、memmove()函数
- 用C语言实现函数 memmove
- 2.C语言实现函数void *memmove(void *dest, const void *src, size_t n)。memmove 函数的功能是拷贝src所指的内存内容前n个字节到dest所指
- C语言模拟实现memcpy,memmove函数
- memcpy和memmove函数的实现
- C语言中不用宏实现变长参数函数的原理及实现
- C语言可变参数函数的实现[转]
- C语言可变参数函数的实现
- memcpy和memmove函数的实现
- C语言部分函数原型实现
- C语言常用函数的底层实现方法
- c语言对时间的处理函数和计时的实现
- C语言部分函数原型实现
- C语言实现类中方法 用函数指针在结构体中加入函数
- C语言部分函数原型实现
- C语言中不用宏实现变长参数函数的原理及实现
- c语言对时间的处理函数和计时的实现
- 用C语言来实现的类似C++函数的重载特性-----void*指针闲谈
- (C语言)头文件实现的函数