-2

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

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

而且我无法从他们的示例中看出 memmove 与 memcpy 有何不同。尽管示例是为了显示差异,但它们都给出了相同的结果。请帮忙。

4

1 回答 1

1

这是扩展评论而不是答案。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
于 2015-01-02T18:48:21.307 回答