Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       strcat, strncat - Concaténer deux chaînes

SYNOPSIS

       #include <string.h>

       char *strcat(char *dest, const char *src);

       char *strncat(char *dest, const char *src, size_t n);

DESCRIPTION

       La  fonction  strcat()  ajoute  la  chaîne  src à la fin de la chaîne dest en écrasant l'octet NULL final
       (« \0 ») à la fin de dest, puis en ajoutant un nouvel octet NULL final. Les chaînes  ne  doivent  pas  se
       chevaucher, et la chaîne dest doit être assez grande pour accueillir le résultat. Si dest n'est pas assez
       grande,  le comportement du programme est imprévisible. Les dépassements de tampon font partie des moyens
       préférés pour attaquer les programmes sécurisés.

       La fonction strncat() est similaire, à la différence que :

       –  elle ne prend en compte que les n premiers octets de src ;

       –  src n'a pas besoin d'être terminée par NULL si elle contient au moins n octets.

       Comme pour strcat(), la chaîne résultante dans dest est toujours terminée par NULL.

       Si src contient au moins n octets, strncat() écrit n + 1 octets dans dest (n octets de src  plus  l'octet
       NULL final). De ce fait, dest doit être au moins de taille strlen(dest) +n + 1.

       Une implémentation simple de strncat() pourrait être :

           char *
           strncat(char *dest, const char *src, size_t n)
           {
               size_t dest_len = strlen(dest);
               size_t i;

               for (i = 0 ; i < n && src[i] != '\0' ; i++)
                   dest[dest_len + i] = src[i];
               dest[dest_len + i] = '\0';

               return dest;
           }

VALEUR RENVOYÉE

       Les fonctions strcat() et strncat() renvoient un pointeur sur la chaîne résultat dest.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌─────────────────────┬──────────────────────┬─────────┐
       │ InterfaceAttributValeur  │
       ├─────────────────────┼──────────────────────┼─────────┤
       │ strcat(), strncat() │ Sécurité des threads │ MT-Safe │
       └─────────────────────┴──────────────────────┴─────────┘

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.

NOTES

       Certains systèmes (BSD, Solaris et autres) fournissent la fonction suivante :

           size_t strlcat(char *dest, const char *src, size_t size);

       Cette  fonction  ajoute  la  chaîne  src,  terminée  par  NULL,  à  la  chaîne  dest  en  copiant au plus
       size-strlen(dest) - 1 depuis src et ajoute l'octet NULL en fin de chaîne au résultat  sauf  si  size  est
       inférieur  à  strlen(dest). Cette fonction corrige le problème de dépassement de tampon de strcat(), mais
       l'appelant doit quand même gérer la possibilité de pertes de données si size est trop petit. La  fonction
       renvoie la longueur de la chaîne que strlcat() a essayé de créer. Si la valeur renvoyée est supérieure ou
       égale  à  size,  c'est  qu'il  y  a  eu  perte  de données. Si les pertes de données sont problématiques,
       l'appelant doit soit vérifier les arguments avant  l'appel,  soit  tester  la  valeur  de  retour  de  la
       fonction.  strlcat()  n'existe pas dans glibc et n'est pas normalisée par POSIX, mais est disponible sous
       Linux avec la bibliothèque libbsd.

EXEMPLES

       Parce que les fonctions strcat() et strncat() doivent rechercher l'octet NULL qui termine dest en partant
       du début de la chaîne, le temps d'exécution de ces fonctions est linéaire en la  longueur  de  la  chaîne
       dest.  Cela  peut  être  mis  en  évidence  avec le programme suivant (si l'objectif est de concaténer de
       nombreuses chaînes dans une chaîne tierce, la copie manuelle des octets de chacune de ces chaînes  source
       tout en maintenant un pointeur sur la fin de la chaîne cible donnera de meilleures performances).

   Source du programme

       #include <stdint.h>
       #include <string.h>
       #include <time.h>
       #include <stdio.h>

       int
       main(int argc, char *argv[])
       {
       #define LIM 4000000
           char p[LIM + 1];    /* +1 for terminating null byte */
           time_t base;

           base = time(NULL);
           p[0] = '\0';

           for (int j = 0; j < LIM; j++) {
               if ((j % 10000) == 0)
                   printf("%d %jd\n", j, (intmax_t) (time(NULL) - base));
               strcat(p, "a");
           }
       }

VOIR AUSSI

       bcopy(3), memccpy(3), memcpy(3), strcpy(3), string(3), strncpy(3), wcscat(3), wcsncat(3)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions  pour  signaler  des  anomalies et la dernière version de cette page peuvent être trouvées à
       l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Grégoire Scano <gregoire.scano@malloc.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       debian-l10n-french@lists.debian.org.

GNU                                              1 novembre 2020                                       STRCAT(3)