字符串相关memmove

字符串相关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;
 }

 

你可能感兴趣的:(字符串相关memmove)