一、memcpy使用和模拟实现

1.1.memcpy函数

void * memcpy ( void * destination, const void * source, size_t num );

1.2.memcpy函数的作用

     从源指向的内存位置直接将num字节的值复制到由目标指向的内存块中。

     这个函数在遇到'\0'的时候并不会停下来

1.3.memcpy函数的使用

代码如下(可自行测试):

#include<stdio.h>
int main() {
    int arr1[] = { 0,1,2,3,4,5,6,7,8,9 };
    int arr2[10] = { 0 };
    memcpy(arr2, arr1, 20);
    for (int i = 0; i < 10; i++) {
        printf("%d ", arr2[i]);
    }
    return 0;
}

1.4.memcpy函数的模拟实现

代码如下(可自行测试):

#include <stdio.h>
#include <assert.h>

void* my_memcpy(void* dst, const void* src, size_t count) {
    assert(dst && src);
    char* d = (char*)dst;
    const char* s = (const char*)src;
    while (count--) {
        *d++ = *s++;
    }
    return dst;
}

int main() {
    int arr1[] = { 0,1,2,3,4,5,6,7,8,9 };
    int arr2[10] = { 0 };
    my_memcpy(arr2, arr1, sizeof(arr1));  
    for (int i = 0; i < 10; i++) {
        printf("%d ", arr2[i]);
    }
    return 0;
}

二、memmove使用和模拟实现

2.1.memmove函数

void * memmove ( void * destination, const void * source, size_t num );

2.2.memmove函数的作用

     将一块内存块中num字节的值从源指向的位置复制到由目标指向的内存块中。复制过程仿佛使用了中间缓冲区,从而允许目标和源内存区域重叠。

2.3.memmove函数的使用

代码如下(可自行测试):

#include<stdio.h>
int main() {
    int arr1[] = { 1,2,3,4,5,6,7,8,9 ,10};
    memmove(arr1+2, arr1, 20);
    for (int i = 0; i < 10; i++) {
        printf("%d ", arr1[i]);
    }
    return 0;
}

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐