memmove、memcopy

memmove和memcopy

> 他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。

两者的功能基本相同,唯一不同的是,当 dest 和 src 有重叠的时候选用不同的函数可能会造成不同的结果。

1. 当 src 和 dest 所指内存区有重叠时,memmove 相对 memcpy 能提供保证能将 src 所指内存区的前 n 个字节正确的拷贝到 dest 所指内存中;

2. 当 src 地址比 dest 地址低时,两者结果一样。换句话说,memmove 与 memcpy 的区别仅仅体现在 dest 的头部和 src 的尾部有重叠的情况下;

- memmove

```
// 伪代码
void *memmove(void *dest, const void *src, size_t n) {
	char temp[n];
	int i;
	
	char *d = dest;
	const char *s = src;
	
	for (i = 0; i < n; i++) {
		temp[i] = s[i];
	}
	for (i = 0; i < n; i++) {
		d[i] = temp[i];
	}
	
	return dest;
}
```

- memcopy

```
// 伪代码
void *memcopy(void *dest, const void *src, size_t n) {
	char *d = dest;
	const char *c = src;
	
	int *di;
	const int *si;
	int r = n % 4;
	while (r--) {
		*d++ = *s++;
	}
	di = (int *)d;
	si = (const int *)s;
	
	while (n--) {
		*di++ = *si++;
	}
	return dest;
}
```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值