分享

Linux 下 mem类函数 的实现

 zxlvxj 2012-08-22
#include <stdio.h>

void *my_memset(void *s, int val, size_t size)                       
{
    char *ps = s;
   
    while (size--) {
        ps[size] = val;
    }
   
    return s;
}

void *my_memcpy(void *dest, const void *src, size_t size)                 //must not overlo
{
    char *pdest = dest;
    const char *psrc = src;
   
    while (size--) {
        *pdest++ = *psrc++;
    }
   
    return dest;
}

void *my_memmove(void *dest, const void *src, size_t size)                     //Could deal with overlap
{
    char *pdest = dest;
    const char *psrc = src;
   
    if (psrc < pdest && psrc + size > pdest) {                                               
        while (size--)
            pdest[size] = psrc[size];
    } else {
        while (size--)
                    *pdest++ = *psrc++;
    }
   
    return dest;
}

int main(int argc, char **argv)
{
    char s1[30] = "ajjkdsjfhdjhasjaskjj";
    char s2[10] = "hafjjhjhj";

//    printf("%s\n", my_memset(s1, 'x', 9));
//    printf("%s\n", my_memcpy(s1, s2, 9));
    printf("%s\n",     my_strncpy(s1, s2, 10));
//    printf("%s\n", memmove(s1, s1 + 2, 9));

    return 0;
}

attention:
   memmove:                        
                                                              ________________________                                        
                                                            | _______________*dest_____|                                   
                         head   __________ |____|____________________|                                       
                                    |______*src_|____|                                                                                                
                                                             overlop(1)                                                                             

                             ________________________
                            | ___________*dest________|
                           |__________________|______|__________
                                           head                 |______|______*src__|   
                                                                             |
                                                                       overlop
                                                                           (2)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多