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

来源:互联网 发布:sql join inner join 编辑:程序博客网 时间:2024/06/05 06:30

函数实现:


信息来自RHEL,man page:MEMCPY(3)                  Linux Programmer's Manual                 MEMCPY(3)NAME       memcpy - copy memory areaSYNOPSIS       #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 areaSYNOPSIS       #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;}

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

4 0
原创粉丝点击