memcpy与startIndex?

34 c++ memcpy

我希望从特定的起点将特定长度的内容从一个缓冲区复制到另一个缓冲区.我检查过memcpy()但只需要复制内容的长度,而我也要指定起始索引.

是否有任何功能可以做到这一点,还是有任何好的方法来完成现有的memcpy功能?

Goz*_*Goz 70

我总是喜欢这种语法

memcpy( &dst[dstIdx], &src[srcIdx], numElementsToCopy * sizeof( Element ) );
Run Code Online (Sandbox Code Playgroud)

  • 同上.在如此低的水平上复制内存时,你不能太冗长.快速命名你的指标会增加你准确回忆5个月后发生的事情的可能性. (7认同)

小智 23

只需将您想要的偏移量添加到缓冲区的地址即可.

char abuff[100], bbuff[100];
....
memcpy( bbuff, abuff + 5, 10 );
Run Code Online (Sandbox Code Playgroud)

这将从abuff [5]开始复制10个字节到bbuff.

  • 代码完成了我所说的,无论什么类型的abuff. (5认同)
  • 这是一个有点欺骗性的例子。它之所以有效,是因为 char 的长度保证为 1 个字节。对于 size <> 1 的所有其他类型,此代码将编译但运行不正确(除了无效课程)。 (2认同)

sha*_*oth 7

只需将偏移量添加到地址即可.例如,如果要从第N个字节开始复制缓冲区:

memcpy( destination, source + N, sourceLen - N );
Run Code Online (Sandbox Code Playgroud)

这将复制到destination.如果您还想要偏移目标 - 将偏移添加到两者:

memcpy( destination + N, source + N, sourceLen - N );
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于源指向长度为 1 字节的类型的情况。对于所有其他情况,您将得到不正确的偏移量(void 根本无法编译) (2认同)