题目
编写自定义函数实现简易内存块拷贝 my_memcpy,按字节将源内存区域的数据复制到目标内存区域(假设内存区域不重叠)。
输入格式:输入一行待拷贝的测试字符串。
输出格式:输出拷贝至目标缓冲区后的字符串内容。
数据范围与约定:拷贝字节数由字符串长度决定。
思路与算法
1. 通用指针 void* 与字节指针
通用接口接收 void *dest, const void *src。因为 void* 不支持直接解引用和自增,必须先强制转换为单字节指针 unsigned char*。
2. 逐字节拷贝循环
循环 while (n--) *d++ = *s++; 复制指定数量的字节。注意若内存可能重叠需用 memmove。
完整程序
#include <stdio.h>
#include <stddef.h>
// 实现 memcpy:以单字节(unsigned char)为单位进行内存块拷贝
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