- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中内存重叠问题
内存重叠:拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。 在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标地址不重叠,或者使用memmove函数进行内存拷贝。 memmove函数对内存重叠做了处理。 现在来看函数strcpy 原型:extern char *strcpy char *dest,char *source ; 功能:把source所指由NULL结束的字符串复制到dest所指的数组中。 说明:source和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳source的字符串。 返回指向dest的指针。 重叠从两方面考虑: 1 .dest数据覆盖了source; 如:dest 8byte 地址:1000 source 8byte 地址:1002 2 .dest所指的区域本来就是source的一部分; 如:dest 8byte 地址:1000 source 8byte 地址:0998 例如:针对第一种交叉情况情况,dst src且dst+count src,memcpy和memmove的结果是一样的。请看下面的例子讲解: string s hello world; memmove s[0],s[5],10 ; 举个内存重叠环境的例子: int main char *p NULL; p char* malloc 100 ; memcpy p,1座机电话号码,strlen 1座机电话号码 ; //会等到错误的结果,有一个长度参数,只能拷贝cnt个 //字节就结束了 printf before p %s\n,p ; strcpy p+1,p ; //注意:这里重叠了,而strcpy是根据判断原串中的\0 printf after p %s\n,p ; free p ; 1.下面来看strcpy 原型写法: 字符串拷贝.?char *strcpy char *strDest, const char *strSrc assert strDest! NULL strSrc ! NULL ;char *address strDest;?while *strDest++ * strSrc++ ·1 ! /0 ?NULL ;?return address ; 2.下面来看下memcpy函数的原型写法:内存拷贝 void *memcpy void *dest, const void *source, size_t count assert NULL ! dest NULL ! source ; char *tmp_dest char * dest;char *tmp_source char * source;while count -- //不对是否存在重叠区域进行判断*tmp_dest ++ *tmp_source ++;return dest; 3.下面来看下memmove函数的原型写法: void *memmove void *dest, const void *source, size_t count assert NULL ! dest NULL ! source ;char *tmp_source, *tmp_dest;tmp_source char * source;tmp_dest char * dest;if dest + count source || source + count dest // 如果没有重叠区域while count-- *tmp_dest++ *tmp_source++; else //如果有重叠(反向拷贝)tmp_source + count - 1;tmp_dest + count - 1;while count-- *--tmp_dest *--tmp; return dest; 深入分析: void *memcpy void *dst, const void *src, size_t count :void *memmove void *dst, const void *src, size_t count ; 先看一个测试: #include #include int main int a[10]; for int i 0; i 10; i++ a[i] i; memcpy a[4],a,sizeof int *6 ; //结果为:1 2 3 0 1 2
您可能关注的文档
- CWB-20-1000A穿墙套管.doc
- 5资源管理(死锁)习题.doc
- CWB-20-3000A_穿墙套管.doc
- CWB-202500A穿墙套管.doc
- 5车M30x15螺纹.doc
- CWB-20穿墙套管.docx
- CWB-352500A穿墙套管.doc
- 5轴HSC加工实现3班连续作业.doc
- CWB型磁力驱动旋涡泵介绍.doc
- CWC-101250A穿墙套管.doc
- 5.3+认识二元一次方程组的应用(第3课时+行程问题)(教学课件)数学北师大版2024八年级上册.pptx
- Unit+5+Section+B(1a-2b)(同步课件)-【精品课】+2025-2026学年七年级英语上册同步精品课件(人教版2024).pptx
- Unit+6+单元写作讲练-【精品课】2025-2026学年八年级英语上册同步精品课件(人教版2024).pptx
- 《北京折叠》为什么能获得雨果奖?——两个原因.docx
- 《民用建筑信息模型设计标准》(DB11T-1069-2014).docx
- 初一语文金色花9[人教版].ppt
- 《世界文化的多样性》教学设计-.doc
- 北师版小学一年级数学小明的一天.ppt
- 新材料作文审题立意.pptx
- 新人教版选修七-Unit-1-Living-well-Grammar.ppt
最近下载
- 《安全生产基础知识》课件(上).pptx VIP
- GB/T 10125-2021人造气氛腐蚀试验盐雾试验.docx VIP
- 07SD101-8电力电缆井设计与安装(高清完整版).docx VIP
- 手机监控 客户端Myeye.pdf VIP
- QJGAC+1523.028-2019+电子电气零部件环境适应性及可靠性通用试验规范.pdf VIP
- 小品剧本网,提供校园各小品剧本,元旦春晚小品剧本,年会小品剧本.doc VIP
- 数据可视化大屏培训课件.pptx VIP
- 2024年郑州农业发展集团有限公司社会招聘工作人员笔试考点考试题库及答案.docx VIP
- 植被恢复工程建设项目施工组织设计(技术标).pdf VIP
- 顿汉布什磁悬浮变频离心(热泵)DCLCM-R.pdf VIP
有哪些信誉好的足球投注网站
文档评论(0)