/*************************
重写 memcpy
*************************/
#include
#include
void * mymemcpy(void *dest,const void *sour,unsigned int n);
int main(int argc,char *argv[])
{
const char * str = "hello world";
char array[20] ="12345 world";
//memset(array,0,20);
mymemcpy(array,str,6);
printf("%s/n",array);
return 0;
}
/*
1:输入输出参数均为void *
2: unsigned int 避免出现负数
3: const修饰,保持只读属性,但编译会警告
*/
void * mymemcpy(void *dest,void *sour,unsigned int n)
{
/*
利用unsigned char,避免在向有符号字符转换中出错
tmpdest,tmpsour 都是防止改变其对应内存的地址
dest必须保存,用于返回原地址
*/
unsigned char * tmpdest = dest;
unsigned char * tmpsour = sour;
assert ((tmpdest!=NULL) && (tmpsour!=NULL));
while ( n-- > 0)
{
*tmpdest++ = *tmpsour++;
}
return dest;
}