//模拟实现memcpy;
代码实现如下:
复制代码
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#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <assert.h> void* my_memcpy(void* dst,const void* src, int count) { char* dst1 = (char*)dst; const char* src1 = (const char*)src; assert(dst != NULL); assert(src != NULL); while(count--) { *dst1 = *src1; dst1++,src1++; } return dst; } int main() { char a[] ="abcde"; char b[20]; my_memcpy(b, a, sizeof(a)); printf("%sn",b); system("pause"); return 0; }
展示结果如下:
//模拟实现memmove;
我们应该考虑内存重叠问题,可分为两种情况,一种是是从右向左拷(即src<dst && dst<dst+sizeof(a)),另一种是从左往右拷.
代码实现如下:
复制代码
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
46
47
48
49#include <stdio.h> #include <stdlib.h> #include <assert.h> void *my_memmove( char * dst, const char *src, int count) { assert(dst != NULL); assert(src != NULL); if (src < dst && dst < (dst + count)) { char* dst1 = (char*)dst + count - 1; const char* src1 = (char*)src + count - 1; while(count--) { *dst1-- = *src1--; } } else { //left -> right; char* dst1 = (char*)dst; const char* src1 = (const char*)src; assert(dst != NULL); assert(src != NULL); while(count--) { *dst1 = *src1; dst1++,src1++; } } return dst; } int main() { char a[] = "abcdef1234high"; char b[30]; char c[] = "abcdef1234high"; my_memmove( b, a, sizeof(a)); printf("%sn",b); my_memmove( a, a+1, sizeof(a)); printf("%sn",a);//bcdef1234high my_memmove( c+1, c, sizeof(c)); printf("%sn",c);//aabcdef1234high system("pause"); return 0; }
展示结果如下:
最后
以上就是敏感冰淇淋最近收集整理的关于模拟实现 memcpy和模拟实现memmove的全部内容,更多相关模拟实现内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复