调用函数实现内存拷贝以及手动实现内存拷贝 ------ memmove

 1 #include<memory.h>
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include <string.h>
 5 
 6 
 7 // memmove 是按整体拷贝  memcpy 是按字节拷贝
 8 void * mymemmove(void * _Dst,const void * _Src,size_t _Size);// 自己实现memmove
 9 
10 void main()
11 {
12     int a[5] = { 1, 2, 3, 4, 5 };
13     int b[5];
14     memmove(b, a, 12);// 将a数组中的前三个元素拷贝到b数组
15     for (int i = 0; i < 5; i++)
16     {
17         printf("%d , %d\n",a[i],b[i]);
18     }
19 
20     char str1[32] = "abcdefghijklmnopqrstuvwxyz";
21     char str2[32]  = "**************************";
22 
23     memmove(str2,str1,6);
24     printf("%s , %s\n",str1,str2);
25 
26     memmove(str1 + 2, str1, 4);
27     printf("%s , %s\n",str1,str2);
28 
29     mymemmove(str2, str1, 10);
30     printf("%s , %s\n", str1, str2);
31     system("pause");
32 }
33 
34 void * mymemmove(void * _Dst, const void * _Src, size_t _Size)
35 {
36     if (_Dst==NULL || _Src==NULL)
37     {
38         return NULL;
39     }
40 
41     void *psrc = malloc(_Size);// 分配内存
42     memcpy(psrc, _Src, _Size);//整体拷贝到临时分配的内存
43     memcpy(_Dst,psrc,_Size);
44     free(psrc);
45     return _Dst;
46 }
47 
48 
49 /*************************运行结果***************************/
50 
51 /*
52     1 , 1
53     2 , 2
54     3 , 3
55     4 , -858993460
56     5 , -858993460
57     abcdefghijklmnopqrstuvwxyz , abcdef********************
58     ababcdghijklmnopqrstuvwxyz , abcdef********************
59     ababcdghijklmnopqrstuvwxyz , ababcdghij****************
60     请按任意键继续. . .
61 */

 

posted on 2015-05-12 14:53  Dragon-wuxl  阅读(181)  评论(0)    收藏  举报

导航