Acerca de la función memcpy()
Generalmente existen tres tipos: copiar de principio a fin o copiar a juicio (equivalente a memmove).
Escribí un programa de prueba después de su programa.
¿Ciel? mensaje2[60]? =?"abcdefghijklmnopqrstuvwxyz";
¿Carácter? tmp[60];
int? main()
{
strcpy(tmp,? mensaje 2);
printf("tmp=?\"s\"\n ",? tmp);
memcpy(tmp 4,?tmp? ?16,?10);
printf("memcpy(tmp 4,?tmp? ?16,?10); gt? tmp? =?\"s\"\n ",? tmp);
strcpy(tmp,? mensaje 2);
memcpy(tmp 6,? tmp? 4,?10);
printf("memcpy(tmp 6,?tmp? 4,?10); gt?tmp?=?\"s\"\n ",?tmp);
strcpy(tmp,? mensaje 2);
memcpy(tmp 4,?tmp? 6,?10);
printf("memcpy(tmp 4 ,?tmp?6,?10); gt?tmp?=?\"s\"\n",?tmp);
tmp = " abcdefghijklmnopqrstuvwxyz "
memcpy( tmp 4, tmp 16, 10); gttmp = " abcdqrstuvwxyzopqrstuvwxyz "
memcpy(tmp 6, tmp 4, 10); gttmp = " abcdefefefijijmnqrstuvwxyz "
memcpy(tmp 4, tmp 6, 10); gttmp = " abcdghijklmnopopqrstuvwxyz "
Visible en memcpy(tmp 6, tmp 4, 10); Efefu
Explica que mi compilador (gcc) usa copia principal cuando hace memcpy, es decir, copia desde la dirección inicial.
Memcpy(tmp 4, tmp 6, 10) Si esto es correcto, si hay un problema, es una copia final.
Si no hay ningún problema, luego del juicio, copia inteligente Equivalente a memmove.