[转]memcpy和memmov
来源:互联网 发布:fake it till make it 编辑:程序博客网 时间:2024/06/07 07:07
void* memcpy(void* dest, void* source, size_t count)
{
void* ret = dest;
//copy from lower address to higher address
while (count--)
*dest++ = *source++;
return ret;
}
void* memmove(void* dest, void* source, size_t count)
{
void* ret = dest;
if (dest <= source || dest >= (source + count)) {
//Non-Overlapping Buffers
//copy from lower addresses to higher addresses
while (count --)
*dest++ = *source++;
}
else {
//Overlapping Buffers
//copy from higher addresses to lower addresses
dest += count - 1;
source += count - 1;
while (count--)
*dest-- = *source--;
}
return ret;
}
注意区别:
memcpy需要保证复制以后,原有数据source不被破坏。
memmove有移动的意思,原有数据可能,注意是可能被破坏掉。但memmove不清除原有数据。
但我有一个想法:memmove的实现显然有累赘的代码,其实无论区域是否重叠,用高位向低位复制的方法肯定不会有问题,又何苦要用if...else呢,按如下代码即可:
C代码void* memmove(void* dest, void* source, size_t count)
{
void* ret = dest;
//Think of Overlapping Buffers
//copy from higher addresses to lower addresses
dest += count - 1;
source += count - 1;
while (count--)
*dest-- = *source--;
return ret;
}我想,之所以采用判断的方式分别进行,主要是展现一下move的思路,增强可读性吧,当两个区域不会重叠的时候,memmove和memcpy是等价的。
通过实现方法可以看出:move并未清除原有数据。但move比cpy更安全,在使用cpy的时候,一定要考虑区域重叠的问题,另外还要考虑缓冲区溢出的问题啊。
还要知道memncpy能确保缓冲区不溢出。但要根据你的情况,如果char *str_source=\"hello\", char buf[1024]的话,你用memcpy就可以了。用memncpy是没必要的。还可以用strcpy,更方便,毕竟已经确保不可能溢出了。
- [转]memcpy和memmov
- C内存重叠问题,memcpy,memmov,strcpy
- 内存重叠问题,memcpy,memmov,strcpy
- C内存重叠问题,memcpy,memmov,strcpy
- strcpy,strcmp,strcat,memcpy,memmov,memset,memcmp的实现
- strcpy,strcmp,strcat,memcpy,memmov,memset,memcmp的实现
- C\C++内存重叠问题,memcpy,memmov,strcpy
- memmov实现
- 【转】memcpy 和memmove的实现
- [转]memcpy和memmove的区别
- [转]strcpy和memcpy的区别
- c++中memcpy和memcpy的用法
- strcpy, memcopy, memmov
- strncpy和memcpy辨析
- strncpy和memcpy辨析
- strcpy和memcpy
- strcpy和Memcpy。
- memcpy和bcopy
- linux 下查看文件个数及大小
- 【转】linux下常用命令参数详解-vi
- 物化视图
- cygwin配置 ssh服务(windows7)
- 【转】c格式化输出
- [转]memcpy和memmov
- linux命令du和df
- [转]IBM AIX日常维护命令
- 【引用】文件中查找关键字“grep”命令
- bat删除空目录及子目录
- MyEclipse中提示信息常用设置
- Java基础之调用系统命令或可执行程序
- pflie 和spfile区别
- C语言复习笔记--static 全局变量和普通全局变量