代码之家  ›  专栏  ›  技术社区  ›  sharptooth

我可以在“字节数”设置为零的情况下调用memcpy()和memmove()吗?

  •  83
  • sharptooth  · 技术社区  · 14 年前

    当我真的没有东西可以移动/复制时,我需要治疗吗 memmove() memcpy() 作为边缘案例

    int numberOfBytes = ...
    if( numberOfBytes != 0 ) {
        memmove( dest, source, numberOfBytes );
    }
    

    或者我应该不检查就调用函数吗

    int numberOfBytes = ...
    memmove( dest, source, numberOfBytes );
    

    是否需要签入前一个代码段?

    2 回复  |  直到 14 年前
        1
  •  149
  •   Mike Seymour    12 年前

    根据C99标准(7.21.1/2):

    size_t n 功能, n 可以在调用该函数时使值为零。除非明确说明 如7.1.4所述,在这种调用中仍应具有有效值。接到这样的电话,一个 字符序列返回零,复制字符的函数复制零 角色。

        2
  •  5
  •   Matteo Italia    14 年前

    正如@You所说,标准规定memcpy和memmove应该毫无问题地处理这种情况;因为它们通常以类似的方式实现

    void *memcpy(void *_dst, const void *_src, size_t len)
    {
        unsigned char *dst = _dst;
        const unsigned char *src = _src;
        while(len-- > 0)
            *dst++ = *src++;
        return _dst;
    }