题目

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

思路

本题模拟 memcpy:把 n 字节从源复制到目标(保证不重叠)。 把 void* 转成 unsigned char*,循环 n 次执行 *d++ = *s++。重叠区域应使用 memmove,本题可不考虑。

解题分析

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

完整程序

public class Main {
    static void myMemcpy(byte[] dst, byte[] src, int n) {
        for (int i = 0; i < n; i++) {
            dst[i] = src[i];
        }
    }
    public static void main(String[] args) {
        byte[] src = "hello\0".getBytes(java.nio.charset.StandardCharsets.US_ASCII);
        byte[] dst = new byte[6];
        myMemcpy(dst, src, 6);
        int len = 0;
        while (len < dst.length && dst[len] != 0) {
            len++;
        }
        System.out.println(new String(dst, 0, len, java.nio.charset.StandardCharsets.US_ASCII));
    }
}

运行示例

输出:

hello