/*
不适用C库函数,只是用 C 语言实现函数 void* memcpy( void *dst, const void *src, size_t len )
memmove 函数的功能是拷贝 src 所指的内存内容前 n 个字节到 dst 所指的地址上。 简单循环拷贝即可,但是这道题要深究起来很多问题,比如内存区域是重叠的,有可能左边重叠也可能右边重叠。*/#include <stdio.h>
#include <stdlib.h>void* memcpy( void *dst, const void *src, size_t len ){ if (NULL == dst || src == NULL) { return NULL; } char *pDst = (char *)dst; const char *ptSrc = (char *)src; // pDst开始地址,处于ptSrc中,那么不能从头开始拷贝,而是从尾部开始拷贝 if (pDst > ptSrc && pDst < ptSrc + len) { for (int i = len - 1; i >= 0; i--) { pDst[i] = ptSrc[i]; } } else //其他情况是从开始部位开始拷贝 { for (size_t i = 0; i < len; i++) { pDst[i] = ptSrc[i]; } } return dst;}int main()
{ char SrcBuf[] = "jfjwfjjsjfljsfj"; char SrcBuf2[100] = {0}; char *p = SrcBuf + 2; memcpy(SrcBuf, p, 4); printf("%s\n", SrcBuf); system("pause"); return 0;}