#include <stdio.h>
#include <string.h>
void *my_memcpy(void *dst, const void *src, unsigned int count)
{
int main()
{
#include <string.h>
void *my_memcpy(void *dst, const void *src, unsigned int count)
{
char *ret = NULL; //备份dst的地址,用于返回}
char *dst_t = NULL; //强制指针转换,指向dst或重新定位
char *src_t = NULL; //强制指针转换,指向src或重新定位
ret = (char *)dst;
//指针dst空间与指针src空间没有重叠部分,或部分重叠
//此时复制应该从头开始,以免src的内存空间被覆盖
if ((unsigned char *)dst <= (unsigned char *)src ||\
(unsigned char *)dst >= (unsigned char *)src + count)
{
dst_t = (char *)dst;}
src_t = (char *)src;
while(count--)
{
*dst_t++ = *src_t++;}
//指针dst空间落在指针src空间的中间部位
//此时复制应该从尾到头,以免src的内存空间被覆盖
else
{
dst_t = (char *)dst + count -1;}
src_t = (char *)src + count -1;
while(count--)
{
*dst_t-- = *src_t--;}
return ret;
int main()
{
char src[] = "abcdefg";}
char des[5] = {0};
char mydes[5] = {0};
memcpy(des, src, 4);
my_memcpy(mydes, src, 4);
printf("des: %s\nmydes: %s\n", des, mydes);
return 0;