转:C/C++:memmove、memcpy、strcpy三者的区别
来源:互联网 发布:mac口红a17是什么颜色 编辑:程序博客网 时间:2024/06/04 19:59
strcpy只能处理字符串;如果拷贝带有特殊字符的串,就只能用memcpy或memmove。memcpy和memmove功能基本上差不多,但是当源串和目标串有Overlap时,memmove可以正确处理,memcpy则不行。
void *memcpy(void *dst, const void *src, size_t count);
void *memmove(void *dst, const void *src, size_t count);
图的上半部分为源内存区域在目标内存区域右边,下半部分为源内存区域在目标区域左边,源内存区域和目标内存区域都有交叉。
memcpy()是从src的起始部分开始复制,所以虽然第一种情况下没有问题,但如果遇到第二种情况,则会发生错误,如图所示,后两个字节在被复制前已经被覆盖掉了。而memmove()则由于采用了不同的复制机制,所以可以正确处理第二种情况。
VS.NET2003中所附源码如下(有删):
void * __cdecl memcpy (void * dst, const void * src, size_t count)
{
}
void * __cdecl memmove (void * dst, const void * src, size_t count)
{