#include <string.h> // <cstring> en C++
char * strdup( const char * source );
Cette fonction permet de dupliquer une chaîne de caractères.
strdup
alloue une nouvelle zone de mémoire via la fonction malloc
afin d'y copier la chaîne de caractères initiale. Il est donc impératif de libérer cette zone de mémoire après utilisation via la fonction
free
.
En langage C, les chaînes de caractères sont qualifiées d'AZT : A Zéro Terminal. Cela signifie qu'une chaîne de caractères se termine forcément
par un code ASCII nul (pouvant aussi être représenté par '\0'
). La fonction strdup
copiera chaque caractère, un à un,
jusqu'à atteindre ce fameux code ASCII nul. Au passage, il sera lui aussi copié.
S'il y a suffisament de mémoire pour produire la nouvelle chaîne, la fonction renvoie l'adresse de la chaîne dupliquée. Dans le cas contraire, un pointeur nul vous sera retourné.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { const char * original = "The original string."; // On duplique la chaîne de caractères initiale. char * copy = strdup( original ); // On passe chaque lettre en majuscule. char * ptr = copy; while( *ptr != '\0' ) { *ptr = toupper( *ptr ); ptr++; } // On affiche la chaîne finale printf( "%s\n", copy ); // Sans oublier de libérer l'espace mémoire au final. free( copy ); return EXIT_SUCCESS; } |
Et voici le résultat produit par cet exemple de code.
$> gcc -o sample sample.c $> ./sample THE ORIGINAL STRING. $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :