memmove用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
原型:void *memmove( void* dest, const void* src, size_t count );
头文件:<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
相关函数:memset、memcpy
#include <string.h>
int main(void)
{
char s[]="Golden Global View";
memmove(s,s+7,strlen(s)+1-7);
printf("%s",s);
getchar();
return 0;
}
程序输出结果:Global View
memmove函数的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void *my_memmove(void *dest, void *src, int n)
{
char *pdest = (char *)dest;
char *psrc = (char *)src;
assert(dest);
assert(src);
if( pdest>=psrc && pdest<psrc+n-1)
{
while(n)
{
*(pdest+n-1) = *(psrc+n-1);
n--;
}
}
else
{
while(n)
{
*pdest++ = *psrc++;
n--;
}
}
return dest;
}
int main()
{
float arr1[8] ={1.0f,2.0f,3.0f,4.0f,5.0f,6.0f,7.0f,8.0f};
int i = 0;
my_memmove(arr1+3,arr1+2,sizeof(float)*3);
for(i=0; i<8; i++)
{
printf("%f ",arr1[i]);
}
printf("\n");
return 0;
}