使用memcpy时重叠的含义

2 c overlap memcpy

我试图理解memcpy()C库中定义的函数<string.h>

句法: void *memcpy(void*dst,const void*src,size_t n);

我知道这个函数用于将指针指向的内存的内容复制到指针指向src的位置,dst并返回指针指向的地址dst.

我无法理解以下重要声明memcpy():

  • 使用时memcpy(),内存地址不应重叠,如果重叠,memcpy()则未定义.

另一个查询是:传递给函数的第三个参数的size_t n值是否总是一个整数值?

Jab*_*cky 10

从评论中你的问题是你不明白"重叠"意味着什么:

重叠意味着:

这两个存储区域srcdst做的重叠:

在此输入图像描述

但在这里他们没有:

在此输入图像描述

因此,如果你有重叠的内存区域,那么你不能使用,memcpy但你必须使用memmove.


第二个问题:

是的,size_t是无符号整数类型.第三个参数是要复制的字节数,因此它几乎不能是无符号整数类型.

  • 漂亮的图形.建议添加关于`memmove()`的评论作为替代.另外,`size_t`是一些_unsigned_类型."`size_t n`总是一个整数值?",有些人认为"`size_t n`总是一个`int`?" 它不是. (2认同)