memmove(MSDN) - 快速的棕色狐狸/狗

时间:2015-01-02 18:09:43

标签: c msdn memmove

我在这里阅读了关于memmove的MSDN文章:

http://msdn.microsoft.com/en-us/library/aa246469%28v=vs.60%29.aspx

我无法从他们的例子中看出memmove与memcpy的区别。他们都给出了相同的结果,尽管这个例子是为了显示差异。请帮忙。

1 个答案:

答案 0 :(得分:1)

这是一个扩展的评论而非答案。 MSDN示例很差,被两个相似的源字符串混淆了“快速的棕色狐狸跳过懒狗”和“快速的棕色狗跳过懒惰的狐狸”。当源和目标重叠时,我的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