Вопрос по воссозданию функции memmove
Нашел интересный способ воссоздания библиотечной функции memmove.
(The memmove() function copies n bytes from memory area src to memory area dest. The memory areas may overlap: copying takes place as though the bytes in src are first copied into a temporary array that does not overlap src or dest, and the bytes are then copied from the temporary array to dest)
Но никак не могу понять - как работает простое с виду условие предотвращения наложения (overlap) if (dest > src). Оно сравнивает длину строки dest и src или же номер адреса памяти dest и src? Если предположить что величину строки - то попробуем симулировать ситуацию с наложением, вместо mdest задав в качестве параметра msrc+2, что должно вызвать ситуацию наложения одной строки на другую при копировании. Вот так: ft_memmove((msrc+2), msrc, 2);
По логике msrc+2 короче msrc и наше условие if (dest > src) выполняться не должно, но оно все равно почему-то выполняется предотвращая наложение. Как это работает?
void *ft_memmove(void *dest, const void *src, size_t n)
{
size_t i;
char j;
unsigned char *d;
unsigned char *s;
i = 0;
j = 1;
d = (unsigned char *)dest;
s = (unsigned char *)src;
if (!dest && !src)
return (NULL);
if (dest > src)
{
j = -1;
d += n - 1;
s += n - 1;
}
while (i < n)
{
*d = *s;
d += j;
s += j;
i++;
}
return (dest);
}
#include <stdio.h>
int main()
{
char msrc[] = "abcde";
char mdest[4];
ft_memmove(mdest, msrc, 2);
return 0;
}