jake1036

字符串相关memmove

 字符串相关

 1 strcpy strmove 两个函数没有考虑overlap问题。
 2 memmove函数则需要考虑overlap问题。
   overlap避免的一个关键问题就是保证 src未访问的元素,在访问之前不允许修改值。
  代码如下:
  

#include <iostream>
using namespace std;

 
char * memmove(char * dest ,  char * src , int n)
 
{
   
if(!dest || !src)
     
return 0;
   
if(dest == src)
     
return dest;

   
char * tdest = dest;
   
char * tsrc = src;   
   
//需要考虑overlap问题,确定的一个原则就是src某个位置未访问前,不允许改变
   if(dest < src) //由低到高 递增处理
   {
     
for(int i = 0 ; i < n ; i++)
         
*tdest++ = *tsrc++;
   }

   
else
   
{
     tdest 
+= n;
     tsrc 
+= n;
     
for(int i = 0 ; i < n ; i++//由高到底处理
     {
       tdest
--;
       tsrc
--;
       
*tdest = *tsrc;
     }

   }

   
return dest;
 }

 
int main()
 
{
     
char str[] = "12345";
     memmove(str
+1 , str , 2);
     getchar();
     
return 0;
 }

 

posted on 2011-09-27 22:41 kahn 阅读(376) 评论(0)  编辑 收藏 引用 所属分类: c++学习总结


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理