题目
实现简易 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