实现void *memcpy(void *to, const void *from, size_t count)这个函数。首先对这个函数做一些说明。

#include <string.h>

void *memcpy(void *to, const void *from, size_t count)

函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。

在C99中,to和from由restrict修饰。

先来看看微软的实现:

void * __cdecl memcpy (

        void * dst,

        const void * src,

        size_t count

        )

{

        void * ret = dst;

#if defined (_M_IA64)

        {

        extern void RtlMoveMemory( void *, const void *, size_t count );

        RtlMoveMemory( dst, src, count );

        }

#else 


        while (count--) {

                *(char *)dst = *(char *)src;

                dst = (char *)dst 1;

                src = (char *)src 1;

        }

#endif 

        return(ret);

}

再来看看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;

}