memmove 实际上是否“移动”了一块内存并在源头留下了零?

hut*_*123 3 c memcpy memmove

可能的重复:
memcpy 与 memmove

memmove实际上“移动”了一块内存吗?如果是这样,内存中是否会留下零?或者,它就像memcpy一样吗?我正在查看手册页,我不相信我的假设是正确的。如果我想使用 memmove 移动一块内存,我是否必须手动将移动的内存块清零?

R..*_*R.. 5

memmove与清除旧内存无关,事实上,在您想要使用的唯一情况下memmove,清除旧内存会破坏您刚刚复制的数据!这是因为memmove仅当您期望源范围和目标范围重叠时才有用。

通常,如果您发现自己需要memmove,则表明您的设计存在严重的基本低效率。例如,新的 C 程序员通常会尝试使用memmove来删除字符串的前几个字符(例如memmove(s, &s[1], len)),而不是仅仅使用s+1&s[1]来寻址字符串的尾部。包含的算法memmove很少表现得比 O(n^2) 更好。