Wonder奇迹奇迹

导航

C++中两块内存重叠的string的copy方法

如果两段内存重叠,用memcpy函数可能会导致行为未定义。 而memmove函数能够避免这种问题,下面是一种实现方式:

 1 #include <iostream>
 2 using namespace std;
 3 void* memmove(void* str1,const void* str2,size_t n)
 4 {
 5     char* pStr1= (char*) str1;
 6     const char* pStr2=(const char*)str2;
 7     if  (pStr1< pStr2 ) {
 8         for(size_t i=0;i!=n;++i){
 9             *(pStr1++)=*(pStr2++);
10         }
11     }
12     else{
13         pStr1+=n-1;
14         pStr2+=n-1;
15         for(size_t i=0;i!=n;++i){
16             *(pStr1--)=*(pStr2--);
17         }
18     }
19     return str1;
20 }

posted on 2015-04-20 20:45  Wonder奇迹奇迹  阅读(555)  评论(0编辑  收藏  举报