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;
}