C语言中 指针强化训练之 memcpy
由于最近事情杂,很难写blog了,今天看见一个好玩的源代码,写着玩玩,很是检验C程序员的功力,这个函数就是memcpy,以下代码是我自己缩写版本在gnu上找到的glibc中给的大致的意思就是memcpy不考虑内存重叠的情况,而且优化版本是考虑内存重叠的问题的函数memmove;但是memmove 和 memcpy的函数声明的原型是一致的,经过测试下面这个内存复制函数是可以使用的,但是没有优化,考虑
·
由于最近事情杂,很难写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;
}
更多推荐




所有评论(0)