memmove (MSDN) - быстрая коричневая лиса / собака

Я прочитал статью MSDN о memmove здесь:

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

и я не могу сказать из их примера, как memmove отличается от memcpy. они оба дают один и тот же результат, хотя пример - показать разницу. пожалуйста помоги.

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
Другие вопросы по тегам