my_memcpy(str1,str2) 函数用于把str2 字符串拷贝到 str1 中去,存在两种情况的拷贝 一种是由内存覆盖,另一种是无内存覆盖
一.内存不重叠情况
二.内存重叠情况
/****************************************
* File Name : my_memcyp.c
* Creat Data : 2015.3.22
* Author : wk
*****************************************/
#include <stdio.h>
#include<string.h>
#include <assert.h>
void *my_memcpy(void *dst,void const * src,int len)
{
void *p = dst;
char *psrc = (char *)src;
char *pdst = (char *)dst;
assert(NULL != dst && NULL !=src );//断言的使用
if(len == 0)
{
return p;
}
if(pdst+len <= psrc || pdst >= psrc+len)//从前向后拷贝(如果没有重叠区域)
{
while(len--)
{
*pdst = *psrc;
pdst++;
psrc++;
}
}
else //从后向前拷贝(如果有重叠区域)
{
psrc += len-1;//注意对于字符串数组是从0开始标号,要加len-1,不是len
pdst += len-1;
while(len--)
{
*pdst= *psrc;
pdst--;
psrc--;
}
}
return p;
}
/****************************************
* File Name : main.c
* Creat Data : 2015.3.22
* Author : wk
*****************************************/
//#include"my_memcyp.c"
int main()
{
char a[] = "abcdef";
my_memcpy(a+1,a,6);
printf("%s\n",a);
return 0;
}