C++实现内存复制函数(memmove解决内存重叠)

来源:互联网 发布:mysql create trigger 编辑:程序博客网 时间:2024/05/16 15:37

memmove函数用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。

例如将ABC段复制到BCD段时,目标区域和源区域有重叠,当A段复制到B段时,B段发生损坏,无法再将完整的B段复制。


因此发生存在区域重叠时采用逆向复制

void* my_memmove(void*dest, const void* src, size_t n){char*_dest = (char*)dest;const char*_src = (char*)src;if (_dest > _src&&_dest < _src + n)//发生区域重叠{while (n--){*_dest--= *(_src+n);//逆向复制}}else//未发生区域重叠 正向复制{while (n--){*_dest++ = *_src++;}}return dest;}int main(){int s[4] = {1,2,3,4};for (int i = 0; i < 4; i++){cout << s[i] << "";}cout << endl;my_memmove(s+2, s + 3,1*sizeof(int));for (int i = 0; i < 4; i++){cout << s[i]<<"";}getchar();return 0;}



0 0