• 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;
    }
  • 相关阅读:
    MySQL RR隔离 读一致性
    C++奥赛一本通刷题记录(高精度)
    CodeVs天梯之Diamond
    CodeVs天梯之Gold
    CodeVs天梯之Silver
    CodeVs天梯之Bronze
    【2018.1.14】本蒟蒻又回来了
    test
    UVa12545
    UVa1149
  • 原文地址:https://www.cnblogs.com/jason1990/p/4663820.html
Copyright © 2020-2023  润新知