STRNCAT |
Concaténation de N caractère de la chaîne |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
char *strncat(const char *str1,const char *str2,size_t n) |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ de base. |
str2 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ à ajouter à la fin de str1. |
n | Ce paramètre permet d'indiquer le nombre de caractères à ajouter à la fin de str1. |
Description
Cette fonction permet d'ajouter les «n» premiers caractères de la chaîne de caractères «str1» à la chaîne de caractères «str2».
Remarques
- La fonction strncat() concatène pas plus que le nombre de caractères de la chaîne de caractères pointée par str2 à la chaîne de caractères pointée par str1 et termine str1 par un null. Le terminateur null terminant à l'origine str1 est remplacé par le premier caractère de str2. La chaîne de caractères str2 n'est pas modifiée par l'opération. Si les chaînes se chevauchent, le comportement est imprévisible.
- La fonction strncat() renvoie la chaîne de caractères du paramètre str1.
- N'oubliez pas qu'aucune vérification des limites n'a lieu, il est donc de la responsabilité du programmeur de s'assurer que le paramètre de chaîne de caractères str1 est suffisamment grand pour contenir à la fois son contenu d'origine et également ceux du paramètre de chaîne de caractères str2.
- Utilisation d'un buffer suffisant : destination doit avoir assez d'espace pour contenir sa propre chaîne + les num caractères de source + le '\0' final. Si l'espace est insuffisant, cela peut corrompre la mémoire et causer un crash. Exemple sécurisé :
- Ajoute toujours un '\0' final : strncat garantit que destination se termine toujours par '\0', ce qui évite certains débordements. Toutefois, cela fonctionne seulement si num ≤ la taille restante du buffer. Exemple :
- Peut causer un dépassement de mémoire si mal utilisée : strncat ne vérifie pas si destination a assez d'espace disponible. Il appartient au programmeur de s'assurer qu'aucun buffer overflow ne se produit. Mauvais exemple (risque d'écrasement mémoire) :
- Ne gère pas les nullptr : Si destination ou source est nullptr, strncat peut provoquer un plantage du programme. Il est donc important de vérifier que les pointeurs sont valides avant l'appel :
- Différence entre strcat et strncat : Contrairement à strcat, copiant toute la source jusqu'au '\0', strncat limite la copie à num caractères. Cela permet de réduire les risques de débordement, mais ne les élimine pas totalement. Exemple :
- Moins sécurisé que strlcat : strncat n'est pas totalement sécurisé, car il ne connaît pas la taille totale du buffer destination. Certaines plateformes proposent strlcat, évitant les dépassements en connaissant la taille réelle du buffer. Alternative plus sûre avec strncpy_s (C++11) :
- Alternative moderne en C++ : std::string : En C++, il est préférable d'utiliser std::string plutôt que strncat, car il gère automatiquement la mémoire. Exemple équivalent en std::string :
- std::string dest = "Bonjour ";
- std::string src = "le monde";
- dest.append(src, 0, 5); // Ajoute "le mo"
Cela peut écraser d'autres variables et provoquer un comportement indéfini.
std::string est plus sécurisé et plus simple que la manipulation de char*.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

on obtiendra le résultat suivant :
Gladir.comVoir également
Langage de programmation - C++ - Référence de procédures et fonctions - strcat
Langage de programmation - C - Référence de procédures et fonctions - strncat
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 734.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 261.
Dernière mise à jour : Lundi, le 3 août 2015