C/C++知识点之【C语言】 字符串的内存拷贝处理函数
小标 2018-11-26 来源 : 阅读 1025 评论 0

摘要:本文主要向大家介绍C/C++知识点之【C语言】 字符串的内存拷贝处理函数了,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍C/C++知识点之【C语言】 字符串的内存拷贝处理函数了,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

这篇博文我主要是想写一下函数库中的memcpy函数,    对于字符串来说,我们运用字符串中的str类别的函数,但是我们还有一些关于内存的拷贝函数。他们操作的对象是内存,然后可以接受任何类型的数据进行拷贝。    这个是里面的memcpy,然后我们一起查看一下MSDN看一看他的原型:    void *memcpy(void *dest,const void *src,size_t count);    与strcpy不同的就是添加了第三个参数,确定操作的字节数,然后参数类型还有返回类型都是void*,这表示他可以拷贝任意类型的数据。    然后我们看一下实现:    memcpy:void *my_memcpy(void *str,const void *Dstr,int count)                      

   //从内存地址开始改变,并确定改变长度,所以用万能类型去接受
{
             char *pstr = (char *)str;
             char *pDstr = (char *)Dstr;
            assert((str!=NULL) && (Dstr != NULL));
             if(str == Dstr)                            
             //位置相同情况下直接返回需要改变的
                         return (char *)Dstr;
             while(count-- > 0)
            {
                        *pstr++ = *pDstr++;
            }
             return str;
}    然后会出现一个问题,如果我们拷贝的数据中Dstr的起始位置在STR操作之间,那么在改变str时会出现副作用,将导致我们的拷贝结果不正确,所以我们应该考虑到会覆盖的情况。在函数库中有一个memmove函数。memmove:    void *my_memmove(void *pst,const void *Dpst,int size)
{          
             void *p = pst;
             char *pstA = (char *)pst;
             char *pstB = (char *)Dpst;
            assert((pst != NULL) &&(Dpst != NULL));
             if(pstB<pstA< pstB+size)
            {
                                     while(size--)
                        {
                                    *(pstA+size) = *(pstB+size);
                        }
            }
             else
            {
                         while(size--)
                        {
                                    *pstA++ = *pstB++;
                        }
            }
             return p;
}就是遇到被拷贝的空间起始处在拷贝空间中,将会遇到拷贝内存覆盖的现象。在这种情况下我们将考虑从尾部进行拷贝。所以进行了判断。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程