1、memcpyide
memcpy函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。函數
void* my_memcpy(void* dest, const void *src, size_t n) { assert(dest); assert(src); char* dest_t = (char*)dest; char* src_t =(char*) src; while (n--) { *dest_t = *src_t; dest_t++; src_t++; } return dest; }
2、memmove內存
memmove用於從src拷貝n個字符到dest,若是目標區域和源區域有重疊的話,memmove可以保證源串在被覆蓋以前將重疊區域的字節拷貝到目標區域中。但複製後src內容會被更改。可是當目標區域與源區域沒有重疊則和memcpy函數功能相同。it
void* my_memmove(void* dest, const void*src, size_t n) { assert(dest); assert(src); void *ret = dest; char* dest_t = (char*)dest; char* src_t = (char*)src; if (dest_t <= src_t || dest_t >= (src_t + n)) { // 若dst和src區域沒有重疊,則從起始處開始逐一拷貝; while (n--) { *dest_t++ = *src_t++; } } else { // 若dst和src 區域交叉,則從尾部開始向起始位置拷貝,能夠避免數據衝突 dest_t += n - 1; src_t += n - 1; while (n--) { *dest_t-- = *src_t--; } } return ret; }