Les fonctions strcpy
y strncpy
font partie de la bibliothèque standard du langage C et opèrent sur la mémoire existante. C'est-à-dire, vous doit fournir la mémoire dans laquelle les fonctions copient les données de la chaîne, et comme corollaire, vous Vous devez avoir votre propre moyen de déterminer la quantité de mémoire dont vous avez besoin.
Par contraste, strdup
est une fonction Posix, et elle effectue l'allocation dynamique de la mémoire pour vous. Elle renvoie un pointeur vers la mémoire nouvellement allouée dans laquelle elle a copié la chaîne. Mais vous sont maintenant responsables de cette mémoire et doivent éventuellement free
il.
Cela fait strdup
l'un des "cachés malloc
"C'est sans doute aussi pour cette raison qu'elle ne fait pas partie de la bibliothèque standard. Tant que vous utilisez la bibliothèque standard, vous savez que vous devez appeler une fonction free
pour chaque malloc
/ calloc
. Mais des fonctions telles que strdup
introduire une malloc
et vous devez le traiter de la même manière qu'une malloc
pour des raisons de gestion de la mémoire. (Une autre fonction d'allocation cachée de ce type est la fonction d'allocation de GCC abi::__cxa_demangle()
.) Attention !