您好,登錄后才能下訂單哦!
一、memcpy
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; }
二、memmove
memmove用于從src拷貝n個字符到dest,如果目標區域和源區域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區域的字節拷貝到目標區域中。但復制后src內容會被更改。但是當目標區域與源區域沒有重疊則和memcpy函數功能相同。
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; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。