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

自定义ft_bzero与原生bzero行为差异原因咨询

自定义ft_bzero与原生bzero行为差异的原因

自定义实现代码

void    ft_bzero(void *s, size_t n)
{
    char    *str;
    size_t  i = 0;

    str = (char *)s;
    while (i <= n)
    {
        str[i] = 0;
        i++;
    }
    return ;
}

测试代码

int main(void)
{
    char    str[3] = {"abc"};

    ft_bzero(str, 2);

    for (int i = 0; i < 3; i++)
        printf("%c", str[i]);

    return (0);
}

差异原因

核心问题出在自定义ft_bzero的循环条件:while (i <= n)。

  • 原生bzero的定义是将起始地址s处的前n个字节置为0,只会覆盖索引0到n-1的位置。
  • 你的循环条件会让索引从0遍历到n,总共覆盖n+1个字节。

对应到测试用例:
调用ft_bzero(str,2)时,你的代码会把str[0]、str[1]、str[2]全部置为0(因为i<=2),整个数组都是空字符,printf输出空字符不会显示任何内容;而原生bzero仅将str[0]和str[1]置0,str[2]保留原有的'c',所以会输出该字符。

修正方案

将循环条件改为while (i < n),即可与原生bzero行为保持一致:

while (i < n)
{
    str[i] = 0;
    i++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:05:18