You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何自定义实现的ft_memcpy函数无法正常工作?

问题分析:你的ft_memcpy无法正常工作的原因

咱们直接戳核心问题:你返回的不是初始的目标指针,而是循环结束后已经偏移到末尾的dst指针。

标准的memcpy函数明确要求返回传入的原始dst起始地址,但你的代码里,while循环中每次都对dst做了自增操作(*(char *)dst++),循环跑完后,dst已经指向了原始目标地址往后n个字节的位置,这完全不符合函数的预期行为。

举个实际例子:假设你传入的dst是0x1000,n是5,循环结束后dst会变成0x1005,你返回这个值的话,调用者拿到的就不是原来的目标缓冲区起始地址,后续对返回值的操作自然会出问题。

修正后的代码

你只需要先保存原始的dst指针,最后返回这个保存的值就行:

void *ft_memcpy(void *dst, const void *src, size_t n) {
    void *original_dst = dst; // 先把初始目标地址存起来
    while (n--) {
        *(char *)dst++ = *(char *)src++;
    }
    return original_dst; // 返回最初的目标地址
}

额外提两个小细节:

  • 给循环加上大括号能提升代码可读性,后续维护起来更方便
  • 当n为0时,循环不会执行,直接返回原始指针,这也完全符合标准memcpy的行为

内容的提问来源于stack exchange,提问作者KR34T1V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:46:34