模拟实现memmove

void * memmove ( void * destination, const void * source, size_t num );
memmove可以避免在复制时源指向的位置与目标位置重叠的问题
当有重叠时,从源位置的后方 向前方复制

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void* Memmove(void* destination, const void* source, size_t num){
	assert(destination);
	assert(source);
	char* pdestination = (char*)destination;
    char* psource = (char*)source;
	if (pdestination<psource + num&&pdestination>psource){
		while (num--){
			*(pdestination + num) = *(psource + num);
		}
	}
		else{
			while (num--){
				*(pdestination++) = *(psource++);
			}
		}
	return destination;
}
int main(){
	char str1[100] = {0};
	char str2[] = "qwertyui";
	printf("%s\n", Memmove(str2+2, str2, 3));
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43755544/article/details/88831308