string.h庫函式的實現---memcpy
阿新 • • 發佈:2018-12-21
作用:從source的位置開始向後複製num個位元組的資料到destination的記憶體位置。
注意: 1.這個函式在遇到’\0’的時候不會停下來。 2.如果source和destination有任何重疊,複製的結果都是未定義的。
實現機制:因為這個函式使用了void* 所以不能夠解引用複製,所以應該先進行對指標的強轉操作()。使用迴圈對源字串的每一個字元進行復制到目標字元陣列中,返回目標字串的首地址。
函式實現:
const void* my_memcpy(void* dest, const void* src,size_t num)
{
assert(dest != NULL && src != NULL);
void* ret = dest;
for (size_t i = 0; i < num; ++i)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
參考程式碼:
#include <stdio.h>
#include <assert.h>
const void* my_memcpy(void* dest, const void* src,size_t num)
{
assert (dest != NULL && src != NULL);
void* ret = dest;
for (size_t i = 0; i < num; ++i)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
char arr1[10] = "abcde";
char arr2[10] = { 0 };
my_memcpy(arr2,arr1,sizeof(arr1));
printf( "%s\n",arr2);
return 0;
}
執行結果展示: