/************************* 重写 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; }
