memcpy函數
1.調用形式void*memcpy(void*p1,void*p2,int n),表示從第二個位置復制n個字節到第一個位置,而指針類型為void的原因是他可以復制整型字符型甚至指針結構體類型的數據
2.在遇到'\0'的時候不會停下來,因為函數執行拷貝靠字節數,且拷貝對象不一定是字符串,遇到'\0'時拷貝'\0'
3.拷貝和被拷貝對象不能重疊,重疊時此函數不處理重疊部分,不執行重疊部分的值的復制(可以取數組內部的項驗證一下)
4.模擬實現
#include<stdio.h>void* mymemcpy(void* p1, const void* p2,int n)
{int i = 0;for (i = 0; i < n; i++){*(char*)p1 = *(char*)p2;p1 = (char*)p1 + 1;p2 = (char*)p2 + 1;}return p1;
}
int main()
{int arr[5] = { 1,2,3,4,5 };int arr1[5];mymemcpy((void*)arr1, (const void*)arr, 20);int i = 0;for (i = 0; i < 5; i++){printf("%d", arr1[i]);}return 0;
}
5.改進實現:在后面空間小于前面空間時采用從最后一項向前拷貝
6.當地址重疊的時候使用memmove函數
memset函數
1.作用:設置內存
2.調用形式:void*memset(void* p1,int num,size_t good),一個字節一個字節地將內存空間改變為num的值,改變good個字節
memcmp函數
1.調用形式:int memcmp(const void*p1,const void*p2,size_t num),用法和strcmp相同,只不過這次比的是內存空間,size_t為字節數