memcpy, memccpy函数实现——string.h库函数


函数实现:


信息来自RHEL,man page:

MEMCPY(3)                  Linux Programmer's Manual                 MEMCPY(3)

NAME
       memcpy - copy memory area

SYNOPSIS
       #include <string.h>

       void *memcpy(void *dest, const void *src, size_t n);

DESCRIPTION
       The  memcpy()  function  copies  n bytes from memory area src to memory
       area dest.  The memory areas must not overlap.  Use memmove(3)  if  the
       memory areas do overlap.

RETURN VALUE
       The memcpy() function returns a pointer to dest.

memcpy()函数实现:


0.函数原型:

#include <string.h>

void *memcpy(void *dest, const void *src, size_t n);

1.参数:

src:指向源内存指针。
dest:指向目标内存指针。
n:拷贝字节数

2.返回值:

返回一个目标内存区的指针dest

3.功能描述:

memcpy函数将src指针指向的内存区的前n个字节数据拷贝到dest指向的内存区内。但是要求src和dest指向区域不能重叠,否则返回结果将是未定义的。

4.实现:


void *my_memcpy(void *dest, const void *src, size_t n)
{
    void *result = dest;

    //参数判断
    if(NULL == dest || NULL == src || 0 > n){
        fprintf(stderr, "error\n");
        return NULL;
    }

    //循环拷贝直到第n个值
    while(--n){
        *(char *)dest = *(char *)src;
         dest = (char *)dest + 1;
         src = (char *)src + 1;
    }

    return result;
}


信息来自RHEL,man page:

MEMCCPY(3)                                     Linux Programmer's Manual                                    MEMCCPY(3)

NAME
       memccpy - copy memory area

SYNOPSIS
       #include <string.h>

       void *memccpy(void *dest, const void *src, int c, size_t n);

DESCRIPTION
       The  memccpy() function copies no more than n bytes from memory area src to memory area dest, stopping when the
       character c is found.

       If the memory areas overlap, the results are undefined.

RETURN VALUE
       The memccpy() function returns a pointer to the next character in dest after c, or NULL if c was not  found  in
       the first n characters of src.

memccpy()函数实现:


0.函数原型:

#include <string.h>

void *memccpy(void *dest, const void *src, int c, size_t n);

1.参数:

src:指向源内存指针。
dest:指向目标内存指针。
n:拷贝字节数。
c:指定字符。

2.返回值:

memccpy()如果在src的前n个字节中找到字符c,函数将返回一个指向dest中字符c之后的第一个字符的指针。如果没找到将返回NULL,同时拷贝结束。

3.功能描述:

memccpy()函数实现将src指针指向第二内存区的前n个字节的内容拷贝到dest指向的内存区,但是如果在src的前n字节中招到了字符c,将只拷贝c和之前的字符,并且返回指向dest中刚拷贝字符c之后的第一个字符的指针,否则返回NULL。

4.实现:


void *my_memccpy(void *dest, const void *src, int c, size_t n)
{
    void *result    = NULL        ;
    char *dest_func = (char *)dest;
    char *src_func  = (char *)src ;

    while(NULL == dest_func || NULL == src_func || 0 > n){
        fprintf(stderr, "error\n");
        return NULL;
    }

    while(n--){
        *dest_func = *src_func;
        dest_func++;
        if(c == *src_func){
            break;
        }
        src_func++;
    }

    if(0 < n){
        result = dest_func;
    }else{
        result = NULL;
    }

    return result;

}

=============文章结束==============
小菜总结,如有不当,欢迎批评!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值