题目

实现简易 memcpy(不重叠内存)

思路

本题模拟 memcpy:把 n 字节从源复制到目标(保证不重叠)。

void* 转成 unsigned char*,循环 n 次执行 *d++ = *s++。重叠区域应使用 memmove,本题可不考虑。

解题分析

按字节复制 n 个字节,源与目标内存不重叠。重叠区域应使用 memmove。实现时用 unsigned char* 避免符号扩展问题。

完整程序

#include <stdio.h>
#include <stddef.h>

static void my_memcpy(void *dst, const void *src, size_t n)
{
    unsigned char *d = dst;
    const unsigned char *s = src;
    while (n--) {
        *d++ = *s++;
    }
}

int main(void)
{
    char src[] = "hello";
    char dst[6];
    my_memcpy(dst, src, 6);
    printf("%s\n", dst);
    return 0;
}

运行示例

程序不需要从键盘读入,直接运行。输出如下:

hello