实现memmove() 


memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝size个字节到目标dst所指的内存地址的起始位置中。memmove函数的功能同memcpy基本一致,但是当src区域和dst内存区域重叠时,memcpy可能会出现错误,而memmove能正确进行拷贝。

当出现下面图中的情况时 , memcpy并不能满足要求 

但我在windows下的几种编译器中和linux环境下 , memcpy()和memmove()运行结果都是一样的 , 这是因为编译器对memcpy()做了优化 ,但对于我们自己写的memcpy()函数 ,则不会优化 

C语言 实现memmove()

 代码实现memmove():

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void* Memmove(void* Dst, const void* Src, int size) {
	for (int i = size; i >= 0; --i) {
		*((char*)Dst + i) = *((char*)Src + i);
	}
	return Dst;
}
void* Memcpy(void* Dst, const void* Src, int size) {
	for (int i = 0; i < size; ++i) {
		*((char*)Dst + i) = *((char*)Src + i);
	}
	return Dst;
}
int main() {
	char str1[30] = "abcdefghij";
	char str2[30] = "abcdefghij";
	char* s1 = str1 + 4;
	char* s2 = str2 + 4;
	Memmove(s1, str1, 11);
	Memcpy(s2, str2, 11);
	printf("%s\n", s1);
	printf("%s\n", str1);
	printf("%s\n", s2);
	printf("%s\n", str2);
	system("pause");
	return 0;
}

 我们可以看到memcpy()不能成功地完成要求,而memmove()可以C语言 实现memmove()

相关文章: