Nessuno ha risposto a tutte le vostre domande.
strncpy()
viene utilizzato per copiare i dati da una fonte ad una dest di una dimensione impostata, copia (padding) 0x00
s se un byte 0x00
si trova nella matrice di origine (stringa) prima della fine del buffer. A differenza di strcpy
, che copierà per sempre fino a quando non viene trovato un byte 0
, anche se detto byte è ben oltre il proprio buffer.
memcpy()
viene utilizzato per copiare dall'origine a destinazione indipendentemente dal contenuto di origine. Inoltre, tende ad essere ottimizzato per l'hardware e spesso legge le parole di sistema (int
s/long
s) alla volta per accelerare la copia quando l'allineamento lo consente.
memmove()
viene utilizzato per copiare da una sorgente e da un'area di destinazione sovrapposte (ad esempio spostando il contenuto di una matrice attorno a sé o qualcosa di simile - da qui il mnemonico di movimento). Copie i dati partendo dal retro anziché dal fronte per prevenire la perdita di dati dalle regioni che si sovrappongono ai dati di clobbering prima che possano essere letti. Inoltre, tende ad essere leggermente meno efficiente in quanto di solito non c'è molto hardware che aiuti a copiare i dati dal back to front.
bcopy()
e i suoi parenti (bzero
e alcuni altri) è una funzione di copia di byte che ho visto di tanto in tanto in terra incorporata. Solitamente, copia i dati un byte alla volta dall'origine alla destinazione per evitare problemi di indirizzo di memoria disallineati, anche se qualsiasi buon memcpy
gestirà questo in modo che il suo uso sia abbastanza spesso sospetto.
Buona fortuna!
fonte
2010-05-21 20:43:28
'bcopy' non è una funzione standard, che la rende immediatamente inferiore a quella standard. – AnT