gpt4 book ai didi

c - Memmove 重叠

转载 作者:行者123 更新时间:2023-12-03 09:09:45 26 4
gpt4 key购买 nike

我正在使用memmove(),但目标似乎正在覆盖源,或者也许我不明白覆盖是什么。我有一个 char 数组(目标),然后是一个指向目标的指针,该指针位于 vector 内部。

char destination[]="abcdefg";
char * source = destination+3;

来源是“defg”。然后我使用 memmove() 移动四个字符并打印源代码。当我查看源代码时,它已更改为 "gefg"

printf("%s\n",memmove(destination,source,sizeof(char)*4));
printf("%s",source);

我认为 memmove() 应该防止覆盖,或者也许我不理解。

最佳答案

memmove 允许源和目标有重叠区域,并且它的定义使得 memmove 之前源的内容与目标的内容相等在memmove之后。

如果源和目标重叠,您将期望在 memmove 调用之后源会以某种方式发生更改。可以防止的是目的地可能发生的损坏。

memmove(dst, src, len) 的行为类似于:

char buf[len];
memcpy(buf, src, len);
memcpy(dst, buf, len);

但该实现经过优化,只进行一次传递,而不是两次。

关于c - Memmove 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43507854/

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