/************************************************************************/
/* memmove
void *memmove( void* dest, const void* src, size_t count );
用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,
memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同 */
/************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
void * my_memmove( void * const dest, const char * const src, size_t n )
{
// check parameters
if( 0 == n )
{
return NULL;
}
if( NULL == dest || NULL == src )
{
return NULL;
}
char * psrc =(char *)src;
char * pdest =(char *)dest;
if( pdest <= psrc || pdest > psrc + n )
{
std::cout << "forward overlapping" << std::endl;
// copy forward direction
for( size_t i = 0; i < n; i++ )
{
*pdest = *psrc;
pdest++;
psrc++;
}
}
else
{
std::cout << "backward overlapping" << std::endl;
// copy backward direction
pdest = pdest + n;
psrc = psrc + n;
for( size_t i = 0; i< n; i++ )
{
*pdest = *psrc;
pdest--;
psrc--;
}
}
return dest;
}
int main( int argc, char ** argv )
{
char *src = new char[100];
sprintf( src, "%s", "hello world!" );
char * dest = new char[100];
memset( dest, 0, 100*sizeof(char ) );
std::cout << src << std::endl;
char * result = (char*)my_memmove( dest, src, strlen(src) );
std::cout << result << std::endl;
delete src;
delete dest;
getchar();
return 0;
}
// 出处:http://www.cnblogs.com/gina
memmove 实现
最新推荐文章于 2022-11-08 11:27:49 发布