我可以使用“字节数&rdquo来调用memcpy()和memmove()设为零?

我是否需要处理案件,当我无法移动/复制
memmove()
/
memcpy()
作为边缘案例
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
    memmove( dest, source, numberOfBytes );
}
或者我应该在没有检查的情况下调用该函数
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
是否需要检查前片段?     
已邀请:
从C99标准(7.21.1 / 2):   声明为
size_t n
的参数指定a的数组长度   函数,
n
在调用该函数时可以为零。除非明确说明   否则在本子条款中的特定函数的描述中,指针参数   如此调用仍应具有有效值,如7.1.4所述。在这样的电话中,a   找到一个字符的函数找不到,一个比较两个的函数   字符序列返回零,复制字符的函数复制零   字符。 所以答案是否定的;检查是没有必要的(或者是;你可以传递零)。     
正如@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;
}
除了函数调用之外,你甚至不应该有任何性能压力;如果编译器支持这些函数的内在函数/内联,那么额外的检查甚至可能使代码变得微慢一点,因为检查已经在那时完成了。     
不,检查没有必要。在我看来,依靠零被正确处理是好的和非常合理的。可能值得评论。     

要回复问题请先登录注册