我是靠谱客的博主 无语大白,这篇文章主要介绍C语言:模拟实现memmove,现在分享给大家,希望可以做个参考。

     模拟实现内存移动函数memmove:

      我的代码是关于将字符数组

复制代码
1
{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指的是前面有四个整形的字节数。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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; }


最后

以上就是无语大白最近收集整理的关于C语言:模拟实现memmove的全部内容,更多相关C语言内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部