C++中memcpy函數的使用以及模擬實現
前言
memcpy函數如何使用,以及如何實現我們自己的my_memcpy在這裡給大傢詳細介紹。
一、什麼是memcpy
memcpy是c和c++使用的內存拷貝函數,memcpy函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。
二、memcpy與strcpy的區別
1.復制的內容不同。strcpy隻能復制字符串,而memcpy可以復制任意內容,例如字符數組、整型、結構體、類等。
2.復制的方法不同。strcpy不需要指定長度,它遇到被復制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定復制的長度。
3.用途不同。通常在復制字符串時用strcpy,而需要復制其他類型數據時則一般用memcpy
1.strcpy
int main() { char arr1[] = "abcdef"; char arr2[20] = { 0 }; strcpy(arr2, arr1); printf("%s", arr2); return 0; }
我們再看一下下面的代碼
int main() { int arr1[] = { 1,2,3,4,5 }; int arr2[5] = { 0 }; printf("%s", arr2); return 0; }
這時我們發現arr2就不能正常的拷貝瞭,因為strcpy隻能拷貝字符串,int類型的數組或者結構體都是不能拷貝的,因為strcpy比較依賴’\0’通過檢測‘\0’來實現函數的,這時就需要我們的memcpy函數瞭。
2.memcpy
我們這裡簡單介紹一下函數的使用,函數的三個參數分別是dest(要復制的目的地),str(原目標),count(要復制內容的大小)。
struct S { char name[10]; int age; }; int main() { struct S arr1[] = {{"ajd",20},{"qwe",18}}; struct S arr2[3] = { 0 }; memcpy(arr2, arr1, sizeof(arr1)); return 0; }
這裡我們通過memcpy函數成功復制瞭結構體arr1。
三、模擬實現memcpy
void* my_memcpy(void* dest, const void* src, size_t num) { assert(dest && src); void* ret = dest; while (num--) { *(char*)dest = *(char*)src; ++(char*)dest; ++(char*)src; } return ret; } struct S { char name[10]; int age; }; int main() { struct S arr1[] = {{"ajd",20},{"qwe",18}}; struct S arr2[3] = { 0 }; my_memcpy(arr2, arr1, sizeof(arr1)); return 0; }
這裡我們模擬實現瞭memcpy函數。
總結
這些memcpy函數的全部內容瞭,主要就是講解它的使用,以及我們自己如何去實現它,更多相關C++ memcpy函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!