memmove()函数将n个字节从内存区域src复制到内存区域dest。 存储区可能重叠:复制发生就好像src中的字节一样 首先复制到一个不与src或dest重叠的临时数组中 然后将字节从临时数组复制到dest。
不是分配临时数组并将值复制两次,我们可以执行以下操作:
void *my_memmove(void *dest, const void *src, size_t n) {
signed char operation;
size_t end;
size_t current;
if(dest != src) {
if(dest < src) {
operation = 1;
current = 0;
end = n;
} else {
operation = -1;
current = n - 1;
end = -1;
}
for( ; current != end; current += operation) {
*(((unsigned char*)dest) + current) = *(((unsigned char*)src) + current);
}
}
return dest;
}
在这个实现中,我们只关注我们开始复制的位置。
我的实施有缺点吗?
注意:我实际上不会使用我的实现。我很好奇。