memcpy和memmove 的使用
来源:互联网 发布:电脑用手机网络上网 编辑:程序博客网 时间:2024/05/21 17:37
memcpy是不考虑两个内存串是否有重叠的情况,而memmove是考虑的,也就是使用这个函数,我们就不用担心复制后的内存是否有误,而memcpy可能会被覆盖!
这里是一个在网络上的例子
区别:两个函数都是进行n字节内存内容的拷贝,入口参数和返回参数也都一样,可是这两个函数在内部实现上是有一定区别的,这主要是因为dest内存区域和src内存区域可能有一下四种不同的情况,注意count的影响:
从图中可以看出,src的内存区域和dest的内存区域相对位置和重叠关系有四种情况,memcpy没有考虑重叠的情况,而memmove考虑到了全部情况,因此memcpy函数的时候可能出现意向不到的结果。
这两个函数的实现:
void* mymemcpy(void* dest,void* source, size_t count)
{
char *ret = (char*)dest;
char *dest_t = ret;
char *source_t = (char*)source;
while (count--){
*dest_t++ = *source_t++;
}
return ret;
}
void*my_memmove(void *dst,const void*src,int count)
{
char *ret;
char *dst_t;
char *src_t;
ret = (char *)dst;
if ((unsigned char*)dst<= (unsigned char*)src
|| (unsignedchar *)dst >= ((unsigned char*)src + count))
{
dst_t = (char *)dst;
src_t = (char *)src;
while (count--)
{
*dst_t++ = *src_t++;
}
}else{
dst_t = (char *)dst+ count - 1;
src_t = (char *)src+ count - 1;
while (count--)
{
*dst_t-- = *src_t--;
}
}
return(ret);
}
- memcpy和memmove 的使用
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memmove 和 memcpy的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- memmove和memcpy的区别
- memcpy和memmove的区别
- memcpy和memmove的区别
- 抽象类与接口的区别及应用
- ACM题目分类总结及pku题目分类
- Is Bigendian?
- Android sdk manager 显示 “Done loading packages”,该怎么办?
- zipimport.ZipImportError: can’t decompress data; zlib not available
- memcpy和memmove 的使用
- 修改项目是修改的文件
- android打开照相机的方法
- 比较好用的Smartdraw
- javascript 闭包工作原理
- Windows server 2008 IIS7.5 URLRewrite 伪静态化中的设置
- java编码应该注意的问题
- 各种排序算法时间复杂度、空间复杂度比较
- 羌笛声声胡笳怨,此心长寄天涯远