-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmemcpy.cpp
45 lines (39 loc) · 840 Bytes
/
memcpy.cpp
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void* Memcpy(void* dst, const void* src, size_t size);
int main(int argc, char* argv[])
{
char buf[100] = "abcdefghijk";
//memcpy(buf+2, buf, 5);
Memcpy(buf+2, buf, 5);
printf("%s\n", buf+2);
}
void* Memcpy(void* dst, const void* src, size_t size)
{
char* psrc;
char* pdst;
if(NULL == dst || NULL == src)
{
return NULL;
}
if((src < dst) && (char*)src + size > (char*)dst) // 自后向前拷贝
{
psrc = (char*)src + size - 1;
pdst = (char*)dst + size - 1;
while(size--)
{
*pdst-- = *psrc--;
}
}
else
{
psrc = (char*)src;
pdst = (char*)dst;
while(size--)
{
*pdst++ = *psrc++;
}
}
return dst;
}