-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path8-7.c
More file actions
68 lines (62 loc) · 1.35 KB
/
8-7.c
File metadata and controls
68 lines (62 loc) · 1.35 KB
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//模拟实现C库的memcpy和memmove。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
//dst和src不重叠
void* MyMemcpy(void* dst,const void* src,size_t nums)
{
//assert(dst);
//assert(src);
char* pdst = (char*)dst;
const char* psrc = (const char*)src;
while(nums--)
{
*pdst++ = *psrc++;
}
return dst;
}
// dst和src有可能会重叠
void* MyMemmove(void* dst,const void* src,size_t nums)
{
//assert(dst);
//assert(src);
char* pdst = (char*)dst;
const char* psrc = (const char*)src;
size_t count = strlen(psrc);
if (psrc<pdst && pdst<psrc+count) //psrc<pdst<psrc+count----从后向前
{
pdst = pdst+nums-1;
psrc = psrc+nums-1;
while (nums--)
*pdst-- = *psrc--;
}
else
{
while (nums--)
*pdst++ = *psrc++;
}
return dst;
}
int main()
{
int i=0;
//char* src = "abcdef";
char dst[20]="123456789";;
//size_t len = strlen(src);
//-------------------MyMemcpy---------------------
//memcpy(dst,src,3);
//MyMemcpy(dst,src,3);
//MyMemcpy(dst,src,0);
//MyMemcpy(dst,src,7);
//MyMemcpy(dst,src,len);
//printf("%s\n",dst);
//-------------------MyMemmove---------------------;
//memmove(dst+2,dst,4); //重叠的---121234789
//memmove(dst+10,dst,6);//不重叠的---123456789
//MyMemmove(dst+2,dst,4); //重叠的---121234789
MyMemmove(dst+10,dst,6); //不重叠的---123456789
printf("%s\n",dst);
system("pause");
return 0;
}