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