我是靠谱客的博主 活力机器猫,这篇文章主要介绍memcpy和memmove的模拟实现,现在分享给大家,希望可以做个参考。

复制代码
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
memcpy 函数原型: void * memcpy (void*dest, const void*str, size_t count); 功能 :由str所指向内存区域复制count个字节到dest所指向的内存区域。 缺点:str所指向的内存区域和destiny所指向的内存区域不可重叠。 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> void* my_memcpy(void*dest, const void*src, size_t count) { assert(dest != NULL); assert(src != NULL); //void*类型不可以解引用操作,所以需要强制类型转化 char*pdest = (char*)dest; const char*psrc = (char*)src; while (count--) { *pdest++ = *psrc++; } return dest; } int main() { int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int arr2[10] = { 0 }; int sz = sizeof(arr1); my_memcpy(arr2, arr1, sz); int i = 0; for (i = 0; i < 9; i++) { printf("%d ", arr2[i]); } system("pause"); printf("n"); return 0; }
复制代码
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
memmove 函数原型: void * memmove (void*dest, const void*str, size_t count); 功能: 由str所指向内存区域复制count个字节到dest所指向的内存区域。 优点: str所指向的内存区域和destiny所指向的内存区域可重叠。 void *my_memmve(void*dest, const void*src, size_t count) { assert(dest != NULL); assert(src != NULL); //void*类型不可以解引用操作,所以需要强制类型转化 char*pdest = (char*)dest; char*psrc = (char*)src; //当目标函数的地址小于源函数的地址的时候,从前往后拷贝,避免了拷贝内容被覆盖的可能 if (pdest < psrc) { while (count--) { *pdest++ = *psrc++; } } //当目标函数的地址大于源函数的地址的时候,从后往前拷贝,避免了拷贝内容被覆盖的可能 else { while (count--) { //count在while循环判断的时候已经减过 *(pdest+count) = *(psrc+count); } } return dest; } int main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; my_memmve(arr+4, arr+2, 16); int i = 0; for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%d ", arr[i]); } printf("n"); system("pause"); return 0; }

最后

以上就是活力机器猫最近收集整理的关于memcpy和memmove的模拟实现的全部内容,更多相关memcpy和memmove内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部