C语言:模拟实现memmove
2015-11-18 23:31
302 查看
模拟实现内存移动函数memmove:
我的代码是关于将字符数组
我的代码是关于将字符数组
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }中的3,4,5,6移动到5,6,7,8位置处。这个内存移动涉及到解决了内存重叠的问题,而memcmp()函数http://10740184.blog.51cto.com/10730184/1714516没有解决。为防止覆盖,若不内存重叠时就正常如strcpy拷贝,否则就从后往前拷贝。size-t count指的是字节数,4个整型的元素字节数。src =src +8,指的是前面有两个整形的字节数。dest指的是前面有四个整形的字节数。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> void *my_memmove(void *p1, void *p2, size_t count) { assert(p1); assert(p2); char *dest = (char *)p1; char *src = (char *)p2; dest = dest + 16; src = src + 8; if ((src < dest) && (dest < src + count)) { while (count--) { *(dest + count) = *(src + count); } } else { while (count--) { *dest = *src; src++; dest++; } } return p2; } int main() { int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int i = 0; int len = sizeof(arr1) / sizeof(arr1[0]); int *ret = my_memmove(arr1, arr1, 16); for (i = 0; i < len; i++) { printf("%d ", *(ret + i)); } system("pause"); return 0; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 一道sql面试题附答案
- C# 超高面试题收集整理
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置