Fonction strncpy

Entête à inclure

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

Fonction strncpy

char * strncpy( char * destination, const char * source, size_t length );

Cette fonction permet de copier le contenu d'une chaîne de caractère dans une autre, dans la limite de length caractères. Plusieurs cas peuvent être considérés :

  • Si la chaîne source a une taille inférieure à celle spécifiée en paramètre (paramètre length), alors la chaîne de destination sera complétée avec des codes ASCII nuls (caractère '\0').
  • Si la chaîne source a une taille supérieurs à celle spécifiée en paramètre, alors la chaine produite ne sera pas terminée par code ASCII nul (caratcère '\0'). Il sera alors de votre responsabilité de l'ajouter si vous souhaitez exploiter correctement la chaîne produite. En effet, n'oubliez pas qu'en C on manipule des chaînes AZT (A Zéro Terminal).
  • Si la chaîne source a une taille égale à celle spécifiée en paramètre, alors la chaîne source sera intégralement copiée (y compris le code ASCII 0 terminal).

Rappel : 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').

Paramètres

  • destination : permet de spécifier l'adresse de la chaîne de caractère devant recevoir le contenu de l'autre. Vous devez avoir pré-alloué ce bloc de mémoire avec la taille suffisante pour recevoir la chaîne à copier. Cette allocation pourra être réalisée via la fonction malloc.
  • source : permet de définir l'adresse de la chaîne de caractères à dupliquer.
  • length : represente le nombre de caractères maximal à recopier dans destination.

Valeur de retour

La fonction renvoie l'adresse de la chaîne dupliquée. Attention, elle ne sera pas forcément terminée par un caractère '\0'.

Exemple de code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

define SHORT_LENGTH 10

int main() {

    const char * longString = "A long message"; 
    char buffer[ SHORT_LENGTH ];

    strncpy( buffer, longString, SHORT_LENGTH );
    if ( strlen( longString ) >= SHORT_LENGTH ) {
        puts( "Must add last '\\0' character." );
        buffer[ SHORT_LENGTH -1 ] = '\0';
    }
        
    puts( buffer );
    
    return 0;
}

Sujets connexes

malloc
strcat
strcpy
strcmp
strlen