柚子快報邀請碼778899分享:開發(fā)語言 C語言內(nèi)存函數(shù)
柚子快報邀請碼778899分享:開發(fā)語言 C語言內(nèi)存函數(shù)
memcpy使用和模擬實現(xiàn)
strcpy是對字符串進(jìn)行拷貝的函數(shù),而memcpy是針對內(nèi)存塊進(jìn)行拷貝的函數(shù)
void * memcpy(void * destination ,?const void * source , size_t num);
num是字節(jié)數(shù)
關(guān)于memcpy的使用:
1.函數(shù)memcpy從source的位置開始向后復(fù)制num個字節(jié)的數(shù)據(jù)到destination指向的內(nèi)存位置。
2.這個函數(shù)在遇到'\0‘時不會停下來。
3.如果source和destination有任何的重疊,復(fù)制的結(jié)果都是未定義的。
模擬實現(xiàn)
#include
#include
#include
void* my_memcpy(void * dest,void * src,size_t num)
{
void* ret = dest;
int i = 0;
assert(dest && src);
while (num--)
{
*(char*)dest = *(char*)src;
src = (char*)src + 1;//((char*)src)++;
dest = (char*)dest + 1;//((char*)dest)++;
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
my_memcpy(arr2, arr1, 20);
int i = 0;
for (i = 0; i < 20; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
運(yùn)行結(jié)果與上方相同。
memmove使用和模擬實現(xiàn)
void * memmove (void * destination , const void * source , size_t num);
memmove的使用
和memcpy的差別就是memmove函數(shù)處理的源內(nèi)存塊和目標(biāo)內(nèi)存塊是可以重疊的。
如果原空間的目標(biāo)空間出現(xiàn)重疊,就得使用memove函數(shù)處理。
memmove函數(shù)拷貝完成后,會返回目標(biāo)空間的起始地址。
memmove函數(shù)的模擬
當(dāng)dest>=scr時,應(yīng)該選擇從后向前;
當(dāng)dest #include #include #include void* my_memmove(void* dest, const void* src, size_t num) { assert(dest && src); void* ret = dest; if (dest < src)//從前向后 { while (num--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } else { while (num--)//從后向前 { *((char*)dest+num)=*((char*)src + num); } } return ret; } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; memmove(arr + 2, arr, 5 * sizeof(int)); int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; } memset函數(shù)的使用 void * memset(void * ptr , int value , size_t num); 以字節(jié)為單位設(shè)置value memcmp函數(shù)的使用 int memcmp(const void * ptr1, const void * ptr2 , size_t num ); 柚子快報邀請碼778899分享:開發(fā)語言 C語言內(nèi)存函數(shù) 精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。