Rechercher
 

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 :

Fonction strndup (C2x)

La fonction strncpy La fonction strpbrk


Entête à inclure

#include <string.h>  // <cstring> en C++

Fonction strndup (C2x)

char * strndup( const char * source, size_t size );

Cette fonction permet de dupliquer au plus size caractères de la chaîne passée en paramètre.

la fonction strndup alloue une nouvelle zone de mémoire via la fonction malloc afin d'y copier tout ou une partie de 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 strndup garantit aussi que ce code terminal sera présent dans la chaîne.

Paramètres

Valeur de retour

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é.

Exemple de code

 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 au plus 12 caractères de la chaîne initiale.
    char * copy = strdup( original, 12 );
    
    // 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;
}
Exemple d'utilisation de la fonction strndup

Et voici le résultat produit par cet exemple de code.

$> gcc -o sample sample.c
$> ./sample
THE ORIGINAL
$> 

Sujets connexes

free
strcat
strcmp
strcpy
strdup
strlen


La fonction strncpy La fonction strpbrk