当前位置: 首页 > news >正文

爱站网站长seo综合查询/班级优化大师下载安装最新版

爱站网站长seo综合查询,班级优化大师下载安装最新版,wordpress标题后乱码,建网站算法strcpy,memcpy,内存块重叠 前段时间准备面试,看了一些库函数的实现,在看到memcpy时,发现有处理source和destination所指内存有重叠的情况,而strcpy没有,特别模仿库函数写了这个函数,并进行了测试.以下是具体的source code 和测试结果.char *strcpy2(char *strDest, const char …
strcpy,memcpy,内存块重叠
前段时间准备面试,看了一些库函数的实现,在看到memcpy时,发现有处理source和destination所指内存有重叠的情况,而strcpy没有,特别模仿库函数写了这个函数,并进行了测试.以下是具体的source code 和测试结果.
char *strcpy2(char *strDest, const char *strSrc)
{
assert( (strDest!=NULL) && ( strSrc!=NULL));
if ( strDest == strSrc)
  return strDest ;
 char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) != '\0')
;
return tempptr ;
}
这是修改网络上source code得到的一个版本,简洁,完全可以工作.初看觉得在程序内部改变了strDest和strSrc的地址(确实如此),不是太好,而实际上当别的函数调用后strDest和strSrc的地址恢复到调用前,因为调用只是改变参数的副本,程序改变地址指向的内容,而没有改变地址本身.不过更加明了的写法是用两个零时变量来替代,修改后如下:
char *strcpy3(char *strDest, const char *strSrc)
{
assert( (strDest!=NULL) && ( strSrc!=NULL));
if ( strDest == strSrc)
   return strDest ;
 char *pDest = strDest ;
char *pSrc=\'#\'" /> while( (*pDest ++ = *pSrc ++) != '\0');
 return strDest;
}
和strcpy2相比,增加了一个变量,不过程式更清晰,看个人爱好了.我偏向strcpy3.呵呵.
void memcpy2(void *pDst,const void *pSrc, size_t size)
{
 assert(pDst != NULL);
 assert(pSrc != NULL);
 //src and dst has a  shared area.
 if((pSrc<pDst) && ((char*)pSrc+size > pDst))
 {
  char *pstrSrc= (char *)pSrc + size -1;
  char *pstrDst = (char *)pDst + size -1;
while(size--)
   *pstrDst -- = *pstrSrc--;
 }
 else
 {
  char *pstrSrc= (char *)pSrc ;
  char *pstrDst = (char *)pDst ;
while(size--)
   *pstrDst++ = *pstrSrc++;
}
}
int main()
{
char *pSrc = (char *)malloc(1024);
 char *pDst = pSrc+4;
 strcpy2(pSrc,"12345678910");
 strcpy2(pDst,pSrc);    //(1)
 printf("Before memcpy: pSrc =%s pDst =%s\n",pSrc,pDst);
 memcpy2(pDst,pSrc,strlen(pSrc)*sizeof(char));
 printf("After memcpy: pSrc =%s \n pDst =%s\n",pSrc,pDst);

 return 0;
}
测试结果:
1.如果没有注释掉语句(1),执行到词语时,因为pDst覆盖了pSrc的结束符'\0'而陷入死循环,最后访问到不该访问的地址空间而出现debug错误.
2.注释掉语句(1),执行 memcpy2后,pSrc变成"123412345678910########",pDst变成"12345678910####","#"表示乱码,原因也是原有的结束符被覆盖.程序可以结束.
总结:
1.const在特定的情况下并不能保证它所修饰函数参数为只读.
2.在内存块有重叠的情况下,strcpy会崩溃,memcpy不会.
posted on 2013-11-15 17:39 Shimejing 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/0822vaj/p/3425839.html

http://www.lbrq.cn/news/1110403.html

相关文章:

  • a网站建设/网站维护中
  • 有没有专门做根雕的网站/中文域名注册管理中心
  • 网站 网安备案查询/谷歌浏览器下载手机版安卓
  • 网站建设公司推荐 知乎/搜索引擎营销的主要方式有哪些?
  • 男人和女人做羞羞的免费网站/企业整站seo
  • 查询类网站怎么做/石家庄新闻网头条新闻
  • 有什么网站可以做跳转连接的/sem论坛
  • 做代练去什么网站安全吗/搜索引擎营销简称为
  • 怀柔区住房和城乡建设委员会网站/seo竞争对手分析
  • 上海做网站优化价格/沈阳网站关键词优化公司
  • windous 系统 做网站/杭州网站优化培训
  • 零食网站建设的必要性/seo快速工具
  • 移动网站设计尺寸/简述搜索引擎优化
  • 濮阳网站制作/推广seo网站
  • 英文做影评的网站/产品互联网推广
  • 上海英文网站建设/二级域名注册
  • 最好网页游戏网站/热搜词工具
  • 网站开发看谁的教程/在线资源链接
  • 做网站不备案用香港空间可以吗/百度seo优化怎么做
  • 人人车网站建设费用/文库百度登录入口
  • 广州市酒店网站设计/营销型网站策划书
  • 沈阳网站制作流程/最新腾讯新闻
  • 政府网站建设团队/营销方式和手段
  • 网易那个网站可以做字幕/国内好的seo网站
  • 付费网站模板/怎么开网店
  • 郑州做网站比较好公司/如何优化网站排名
  • 怎么开始做网站/今天重要新闻
  • 怎样建商业网站/推广专家
  • 线上职业技能培训平台/seo技术培训泰州
  • 旅游网站建设网站目的/今天发生的重大新闻事件
  • 大模型 Function Call 的实现步骤及示例详解
  • Leetcode 04 java
  • MBIST - Memory BIST会对memory进行清零吗?
  • 20250718-FDU-HDUOJ钉耙编程一
  • 前端基础——B/S工作原理、服务器与前端三大件
  • 防爆手机是什么?能用普通手机改装吗?