Quel est le but de la `` fonction en C ?
Réponses
Trop de publicités?Exactement ce que cela ressemble (en supposant que vous êtes habitué à la manière abrégée dans laquelle C et UNIX attribue des mots), il duplique les cordes.
En gardant à l'esprit qu'il ne l'est pas réellement partie de l'ISO C norme elle-même (c'est une POSIX chose), c'est en fait le même que le code suivant:
char *strdup (const char *s) {
char *d = malloc (strlen (s) + 1); // Space for length plus nul
if (d == NULL) return NULL; // No memory
strcpy (d,s); // Copy the characters
return d; // Return the new string
}
En d'autres termes:
- Elle tente d'allouer assez de mémoire pour contenir l'ancienne chaîne (plus un caractère null pour marquer la fin de la chaîne).
- Si l'allocation a échoué, il définit
errno
deENOMEM
et retoursNULL
immédiatement (réglage de l'errno
deENOMEM
est quelque chose d'malloc
fait nous n'avons pas besoin explicitement de le faire dans notrestrdup
). - Sinon la répartition travaillé si on copie l'ancienne chaîne de la nouvelle chaîne et de retour à la nouvelle adresse (l'appelant est responsable de la libération à un certain point).
Gardez à l'esprit que c'est la définition conceptuelle. Toute la bibliothèque de l'écrivain valeur de leur salaire peut avoir fourni fortement optimisé ciblage par code du processeur particulier être utilisés.
Si vous faites partie de la foule qui abhorre plusieurs points de sortie dans les fonctions (je n'en ai pas moins qu'il affecte la lisibilité, je ne crois pas être le cas pour une fonction courte), vous pouvez écrire le code comme:
char *strdup (const char *s) {
char *d = malloc (strlen (s) + 1); // Allocate memory
if (d != NULL) strcpy (d,s); // Copy string if okay
return d; // Return new memory
}