memcpy和memmove两函数的区别
题目:char str1[] = "this is a string";
char str2[] = "this is a string";
memcpy(str1 + 4, str1, 6);
memmove(str2 + 4, str2, 6);
现在请把你猜测的str1和str2的输出写下来,再去编译器看结果,如果你的输出与编译器一致,请解释一下,谢谢~~
[解决办法]
顾名思义:
copy操作保证操作前后目标和源内容一致且源内容不被破坏。
move操作仅保证操作后目标内容和操作前源内容一致,不保证源内容不被破坏。
所以
copy用于源和目标不重叠;
move用于源和目标有重叠。
[解决办法]
memcpy 内存块不能重叠
memmove 内存快可以重叠
完毕
[解决办法]
不用试验
memcpy的结果是不确定的。
memmov的结果是"thisthis istring"
[解决办法]
搞不懂你想干什么,既然知道区别,看一下源代码就知道结果应该是什么样的了,有什么好解释的
[解决办法]
}
}
else {
/*
* Overlapping Buffers
* copy from higher addresses to lower addresses
*/
dst = (char *)dst + count - 1;
src = (char *)src + count - 1;
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst - 1;
src = (char *)src - 1;
}
}
#endif /* defined (_M_IA64) */
return(ret);
}
[解决办法]