搜尋了網上關於,memcpy的使用方法,很多都提到,目標地址和源地址不能有重複.一般目標地址和源地址有重複時使用memmov.但是我們的環境中即使目標地址和源地址重複依然可以用memcpy.
網上說VC也是不支援地址重複,但是我用codeblock可以使用,用的是mingw32.
copy不能有重複的記憶體實現:
void * __cdecl memcpy (void * dst,const void * src,size_t count){ void * ret = dst; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return(ret);}
能copy有重複記憶體的實現:
void *MemCopy(void *dest,const void *src,size_t count){ char *pDest=char * (dest); const char *pSrc=const char *(src); if( pDest > pSrc && pDest =0;--i) { pDest[i]=pSrc[i]; } } else { for(size_t i=0; i memmove的實現: void *Memmove(void *Dst, const void*Src,size_t count){void* pDst = Dst;if (Dst (char*)Src + count) //正向copy {while(count--){ *(char*)Dst = *(char*)Src; Dst = (char*)Dst + 1; Src = (char*)Src + 1;}}else //反向copy{ Dst = (char*)Dst + count - 1; Src = (char*)Src + count - 1; while(count--) { *(char*)Dst = *(char*)Src; Dst = (char*)Dst -1 ; Src = (char*)Src -1 ; }}return pDst;}