由于最近事情杂,很难写blog了,今天看见一个好玩的源代码,写着玩玩,很是检验C程序员的功力,这个函数就是memcpy,

以下代码是我自己缩写版本
在gnu上找到的glibc中给的大致的意思就是memcpy不考虑内存重叠的情况,而且优化版本是考虑内存重叠的问题的函数memmove;
但是memmove 和 memcpy的函数声明的原型是一致的,经过测试下面这个内存复制函数是可以使用的,但是没有优化,考虑到内存覆盖的;
问题。

void *memcpy(void*dst,void* src,size_t len)
{
	void *ret = dst;
	if(dst == NULL || src == NULL){
		return NULL;
	}
	while(len--){
		*(char*)dst++ =  *(char*)src++;
	}	
	return ret;
}
void *memove(void *dst,void*src,size_t len)
{
	void *ret = dst;

	if(dst == NULL || src == NULL){
		return NULL;
	}
	
	if(dst <= src || dst >= src + len){
		while(len--){
			*(char *)dst++ = *(char *)src++;
		}
	}else{
		*(char*)dst+=len -1;
		*(char*)src+=len -1;
		*(char *)dst-- = *(char *)src--;
	}
	return ret;
}
Logo

一站式 AI 云服务平台

更多推荐