memcpy、memmove、memset

void *  memcpy(void * dst, const void * src, size_t count)

{

    void *res=dst;



    while (count--)

    {

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

        dst = (char*)dst + 1;

        src = (char*)src + 1;

    }



    return res;

}
void *  memmove(void * dst, const void * src, size_t count)

{

    void *res = dst;



    //重叠部分不影响或者不存在重叠

    if (dst <= src || (char*)src + count <= (char*)dst)

    {

        while (count--)

        {

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

            dst = (char*)dst + 1;

            src = (char*)src + 1;

        }

    }

    else

    {

        dst = (char*)dst + count - 1;

        src = (char*)src + count - 1;

        while (count--)

        {

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

            dst = (char*)dst - 1;

            src = (char*)src - 1;

        }

    }



    return res;

}
void* memset(void* dst, int val, size_t count)

{

    void* res = dst;



    while (count--)

    {

        *(char*)dst = (char)val;

        dst = (char*dst) + 1;

    }



    return res;

}

 

你可能感兴趣的:(move)