void memcpy(const char* src,char* dest){
    int len=strlen(src);
    dest=(char*)malloc(len);
    char* d=dest;
    char* s=src;
    while(len--!=0){
        *d=*s;
        d++;
        s++;
    }
}
char* memcpy(const char* src,char* dest){
	if(*src==NULL)
	{
		return NULL;
	}
	
	char *temp=dest;
	
	while(*src!='\0')
	{
		*dest=*src;
		src++;
		dest++;
	}
	*dest='\0';
	return temp;	
}
void *memcpy(void *dst, const void *src, size_t len)
{
 if(NULL == dst || NULL == src){
  return NULL;
 }
 
 void *ret = dst;
 
 if(dst <= src || (char *)dst >= (char *)src + len){
  //没有内存重叠,从低地址开始复制
  while(len--){
   *(char *)dst = *(char *)src;
   dst = (char *)dst + 1;
   src = (char *)src + 1;
  }
 }else{
  //有内存重叠,从高地址开始复制
  src = (char *)src + len - 1;
  dst = (char *)dst + len - 1;
  while(len--){
   *(char *)dst = *(char *)src;
   dst = (char *)dst - 1;
   src = (char *)src - 1;
  }
 }
 return ret;
}
void memcpy(const char* src,char *&dest)
{   
	 int len=strlen(src);    
	dest=(char*)malloc(++len);    
	char* d=dest;    
	const char* s=src;    
	while(len--!=0)      
	    *d++ = *s++;           
}
代码主要有3个逻辑错误以及一个设计上的错误: 这个设计错误,得分两种情况来讨论(好比标准库中strcpy函数和memcpy函数): 1、对于src来说,若它包含'\0'字符,在memcpy参数中可以不提供src的长度,在函数中可以通过strlen函数来取得src的长度; 2、若src中不包含'\0'字符,则必须在memcpy参数中提供src长度参数,即函数外面提供,否则,将不可能知道src的长度,拷贝也是不可能的。 对于第1种情况,有几点需要注意: 1)计算src长度时,必须加上src的‘\0’字符,即int len = strlen(src)+1; 2)在拷贝时,目的dest的结尾必须加上 ‘\0’字符; 3)这个错误两种情况下都有问题,错误是在函数内部动态分配空间这个问题,参数dest必须定义为char **dest,如果传递的参数定义为*dest,等于就是函数传值啦,在函数中对dest的改变,将不会影响实参,所以这个问题也需要注意。 总结:其实标准库中strcpy函数和memcpy函数的参数dest都不会在函数体中动态分配空间,是在外部分配的。
void memcpy(const char* src,char* dest){ int len=strlen(src);//要考虑'\0'结束符,len需要再加1 dest=(char*)malloc(len);//不能在函数内分配内存,这里得到的是局部变量指针 char* d=dest; char* s=src;//src是const指针,赋值错误 while(len--!=0){ *d=*s; d++; s++; } }
void memcpy(const char* src, char* dest){
	int len = strlen(src)+1;
	//dest = (char*)malloc(len+1);
	char* d = dest;
	const char* s = src;
	while (len-- != 0){
		*d = *s;
		d++;
		s++;
	}
}
void memcpy(const char* src,char* dest){ int len=strlen(src); dest=(char*)malloc(len+1); char* d=dest; char* s=src; while(len--!=0) { *d=*s; d++; s++; } *d=’\0’; }