gpt4 book ai didi

c++ - memmove() 定义中有什么重叠?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:21 26 4
gpt4 key购买 nike

我正在阅读关于 memcpymemmove 的 c++ 引用资料,它们似乎在做同样的事情,除了 memmove 有一个特定的think called(允许目的地和来源重叠)。

什么是重叠以及何时发生?

最佳答案

非常简单。考虑 memmove(dest, source, length)

如果范围 sourcesource + length - 1 指定的字节范围包括 dest 指定范围内的任何字节到dest + length - 1,两个范围重叠。

在数组中移动元素时最有可能发生这种情况。示例:

// Slide array down by one:
char array[N];
memmove( (void*) &array[0], (void*) &array[1], N - 1 );

与元素 1 到 N-2 重叠。向另一个方向滑动也有类似的重叠:

// Slide array up by one:
memmove( (void*) &array[1], (void*) &array[0], N - 1 );

如果您尝试使用 memcpy() 执行相同的操作,则结果行为是未定义的。如果您在以上两个示例中使用 memcpy某些 实现将正常工作。如果您在此处使用 memcpy 而不是 memmove,其他人将因两者之一或两者而失败。这是因为当范围像这样重叠时,C 和 C++ 未定义 memcpy() 的行为。

关于c++ - memmove() 定义中有什么重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20725573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com