(转载)http://blog.sina.com.cn/s/blog_4d3a41f40100cvza.html
实现void *memcpy(void *to, const void *from, size_t count)这个函数。首先对这个函数作一些说明。html
#include <string.h>c++
void *memcpy(void *to, const void *from, size_t count)数组
函数memcpy()从from指向的数组向to指向的数组复制count个字符。若是两数组重叠,不定义函数的行为。函数
在C99中,to和from由restrict修饰。spa
先来看看微软的实现:rest
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;htm
#if defined (_M_IA64)
{
extern void RtlMoveMemory( void *, const void *, size_t count );blog
RtlMoveMemory( dst, src, count );
}
#else
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst 1;
src = (char *)src 1;
}
#endif get
return(ret);
}string
再来看看coreutils中的实现:
void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
char *dest = destaddr;
char const *src = srcaddr;
while (len-- > 0)
*dest++ = *src++ ;
return destaddr;
}
再来看Linux中实现:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--) *tmp++ = *s++ ; return dest;}