题目

编写自定义函数实现简易内存块拷贝 my_memcpy,按字节将源内存区域的数据复制到目标内存区域(假设内存区域不重叠)。

输入格式:输入一行待拷贝的测试字符串。

输出格式:输出拷贝至目标缓冲区后的字符串内容。

数据范围与约定:拷贝字节数由字符串长度决定。

思路与算法

1. 通用指针 void* 与字节指针
通用接口接收 void *dest, const void *src。因为 void* 不支持直接解引用和自增,必须先强制转换为单字节指针 unsigned char*。

2. 逐字节拷贝循环
循环 while (n--) *d++ = *s++; 复制指定数量的字节。注意若内存可能重叠需用 memmove。

完整程序

import java.util.Scanner;

public class Main {
    // 模拟内存块按字节拷贝(System.arraycopy)
    public static void myMemcpy(byte[] dest, int destPos, byte[] src, int srcPos, int length) {
        for (int i = 0; i < length; i++) {
            dest[destPos + i] = src[srcPos + i];
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.hasNext() ? sc.next() : "hello";
        byte[] src = s.getBytes();
        byte[] dest = new byte[src.length];

        myMemcpy(dest, 0, src, 0, src.length);
        System.out.println(new String(dest));
    }
}

运行示例

输出:

hello