【C语言】模拟实现memmove函数(考虑内存重叠)
2015-07-03 11:34
549 查看
//模拟实现memmove函数(考虑内存重叠) #include <stdio.h> #include <assert.h> #include <string.h> void * memmove(void * dst, const void * src, int count) { void * ret = dst; assert(dst); assert(src); if (dst <= src || (char *)dst >= ((char *)src + count)) //正常情况不发生重叠,从低到高 { while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } } else //发生重叠,从低到高 { dst = (char *)dst + count - 1; src = (char *)src + count - 1; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst - 1; src = (char *)src - 1; } } return ret; } int main() { char p[] = "hello!"; char *q = "world"; memmove(p, q,strlen(q)+1 ); printf("%s\n", p); return 0; }
相关文章推荐
- 【C语言】模拟实现memcpy库函数
- C++字符串之间转化——多字节字符集
- 【 C语言】将一个数字按字符形式逐个输出,例如1234,输出为1 2 3 4
- 输出未知数目数字的和
- Otsu(最大类间方差法)方法的C++实现
- 《C语言及程序设计》程序阅读——条件编译
- 让你提前知道软件开发(24):C语言和主要特征的历史
- c++Builder XML XMLDocument
- C++ 类型转换
- C++嵌套类的使用及对外部类的访问权限
- C,C++,VC++有什么区别
- C++ Primer学习笔记(3)——神奇的容器vector及其迭代器iterator
- C++实现单链表
- 写一个用矩形法求定积分的通用函数,分别求:sin(x),cos(x),e^x
- C++计时器
- c语言学生信息管理系统(链表、文件)
- 黑马程序员---C语言基础---if条件句
- 关于学习C++和编程的50个建议和观点
- C++ 程序员如何迎接 Windows 10 的到来
- VIM配置C++开发环境