Nadie contestó todas sus preguntas.
strncpy()
se utiliza para copiar datos desde un origen a un dest de un tamaño de conjunto, la copia (relleno) 0x00
s si un byte 0x00
se encuentra en la matriz de origen (cadena) antes del final de la memoria intermedia. A diferencia de strcpy
, que copiará felizmente hasta que se encuentre un byte 0
, incluso si dicho byte está más allá de su memoria intermedia.
memcpy()
se utiliza para copiar desde el origen al destino sin importar los datos de origen. También tiende a ser muy optimizado para hardware y leerá frecuentemente las palabras del sistema (int
s/long
s) a la vez para acelerar la copia cuando la alineación lo permita.
memmove()
se utiliza para copiar desde un área de origen y destino superpuesta (por ejemplo, mover el contenido de una matriz dentro de sí mismo o algo similar, de ahí el movimiento mnemónico). Copia los datos comenzando por la parte posterior en lugar de por delante para evitar que la pérdida de datos de las regiones superpuestas afecte los datos antes de que puedan leerse. También tiende a ser un poco menos eficiente ya que generalmente no hay mucha ayuda de hardware para copiar datos de atrás hacia adelante.
bcopy()
y sus familiares (bzero
, y algunos otros) es una función de copia de bytes que he visto de vez en cuando en tierra incrustada. Por lo general, copia datos de un byte a la vez desde el origen hasta el destino para evitar problemas en la dirección de la memoria desalineada, aunque cualquier buen memcpy
se encargará de esto, por lo que su uso es a menudo sospechoso.
¡Buena suerte!
'bcopy' no es una función estándar, que inmediatamente la hace inferior a las estándar. – AnT