memcpy、memmove、strcpy函数实现源码及区别

3 篇文章 0 订阅

对于字符串操作的函数声明是在头文件 <string.h>内,在编程中需要使用如下方式来引进:

#include <string.h>


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

            说明: 此函数功能为字符串内存拷贝,src为源字符,dest为目的字符串,拷贝的长度为n,调用此函数需用户保证src,dest所指向的长度为n的内存区域没有重合部分

            源码: void * memcpy(void* dest,  const void*  src,  size_t  n)

                 {

                                 unsigned char* d;

                                 const unsigned char*  s;

                                 for(d=dest, s=src; ++d, ++s, --n)

                                {

                                         *d = *s;  

                                }

                                return dest;

                         }


        2)  void * memmove(void*dest, void* src, size_t n)

             说明: 此函数功能为字符串内存拷贝,src为源字符,dest为目的字符串,拷贝的长度为n,支持src,dest所指向的长度为n的内存区域有重合部分

             源码:void * memmove(void*dest,  void* src, size_t n)

                        {

                                 unsigned char* d;

                                 const unsigned char*  s;

                                if (src < dest && dest < src+n)

                                {

                                       for(d += n;,s+=n; n>0; --n)

                                       {

                                             *--d = *--s;

                                      }

                                }

                                else

                                {

                                     for(; n>0; --n)

                                     {

                                            *d++ = *s++;

                                     }

                                 }

                                return dest;

                         }

          3)  char* strcpy(char* dest, const char* src)

               说明:函数快速执行把src字符串内容复制到dest中,调用需保证src、dest没有重合部分,如有重合部分需要使用  memmove(dest, src, strlen(src)+1)来代替

               源码:char* strcpy(char* dest, const char* src)

                           {

                                char* d = dest;

                                if (dest == NULL || src == NULL) return NULL;  // 此语句在C函数库源码中没有,c语言中对空指针做读写操作会导致程序core dump,此操作应该是被禁止的

                                while((*dest++ = *src++) != '\0') ;

                                return dest;

                           }

                







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值