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