面试题答案
一键面试#include <iostream>
#include <cstring>
int main() {
char src[] = "hello world";
char* dest = &src[3];
// 使用memmove而不是memcpy,因为memmove处理重叠内存更安全
memmove(dest, &src[5], 5);
std::cout << src << std::endl;
return 0;
}
原因:memcpy
函数不保证在源和目标内存区域重叠时能正确工作,而 memmove
函数可以正确处理重叠内存的情况。在本题中,dest
起始位置在 src
偏移 3 个字符的位置,存在内存重叠,所以应该使用 memmove
来确保复制操作的正确性。memmove
的第一个参数是目标地址,第二个参数是源地址,第三个参数是要复制的字节数。这里从 src
的第 5 个字符(即 src[5]
)开始复制 5 个字符到 dest
(也就是 &src[3]
) 。