关于memcpy函数实现的问题

问题描述 投票:0回答:1

这是代码:

void    *ft_memcpy(void *dst, const void *src, size_t n)
{
    unsigned char   *to;
    unsigned char   *from;

    if (dst == NULL && src == NULL)
        return (NULL);
    if (dst == src)
        return (dst);
    to = (unsigned char *)dst;
    from = (unsigned char *)src;
    while (n--)
        *to++ = *from++ ;
    return (dst);
}

我想知道如果我们在这个函数中使用

char
而不是
unsigned char
是否会有区别:

void    *ft_memcpy(void *dst, const void *src, size_t n)
{
    char    *to;
    char    *from;

    if (dst == NULL && src == NULL)
        return (NULL);
    if (dst == src)
        return (dst);
    to = (char *)dst;
    from = (char *)src;
    while (n--)
        *to++ = *from++ ;
    return (dst);
}

如果存在差异,请展示这些函数表现不同的情况。

c pointers memcpy
1个回答
0
投票
  • char
    无符号时,没有区别。

  • char
    使用2的补码进行编码时,没有区别。

  • char
    使用1s的补码或符号量值编码且存在陷阱值时,可能会发生陷阱错误。

  • char
    使用1s'补码或符号幅度和读取值编码为-0时,我认为仍然没有区别,但其他人建议不然


  • 编码风格:我希望

    from
    指向
    const
    数据,但并不认为这会破坏正确的功能。

  • 这里不需要投射到/来自

    void *

© www.soinside.com 2019 - 2024. All rights reserved.