我在这里阅读了有关 memmove 的 MSDN 文章:
http://msdn.microsoft.com/en-us/library/aa246469%28v=vs.60%29.aspx
而且我无法从他们的示例中看出 memmove 与 memcpy 有何不同。尽管示例是为了显示差异,但它们都给出了相同的结果。请帮忙。
我在这里阅读了有关 memmove 的 MSDN 文章:
http://msdn.microsoft.com/en-us/library/aa246469%28v=vs.60%29.aspx
而且我无法从他们的示例中看出 memmove 与 memcpy 有何不同。尽管示例是为了显示差异,但它们都给出了相同的结果。请帮忙。
这是扩展评论而不是答案。MSDN 示例很差,被两个相似的源字符串“The quick brown fox jumps over the lazy dog”和“The quick brown dog jumps over the lazy fox”混淆了。当源和目标重叠时,我的 MS Visual C 给出了正确的结果memcpy()
,但正如@PaulRoub 所写(现已删除),仅仅因为一个编译器正确编码并不意味着另一个编译器会。
#include <stdio.h>
#include <string.h>
int main()
{
char str [] = "abcdefghijklmnopqrstuvwxyz";
printf ("%s\n", str);
memcpy (str, str+1, 25); // copy down
printf ("%s\n", str);
memcpy (str+1, str, 25); // copy up
printf ("%s\n", str);
return 0;
}
程序输出
abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyzz
bbcdefghijklmnopqrstuvwxyz