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

NOM

       strcpy, strncpy - Copier une chaîne

SYNOPSIS

       #include <string.h>

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

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

DESCRIPTION

       La  fonction  strcpy()  copie  la  chaîne  pointée par src, y compris l'octet NULL final (« \0 ») dans la
       chaîne pointée par dest. Les deux chaînes ne doivent pas se chevaucher. La chaîne dest  doit  être  assez
       grande pour accueillir la copie. Attention aux dépassements de tampon ! (consultez BOGUES).

       La  fonction strncpy() est identique, sauf qu'au plus n octets de src sont copiés. Attention : s'il n'y a
       pas d'octet NULL dans les n premiers octets de src, la chaîne résultante dans dest ne  disposera  pas  de
       l'octet NULL final.

       Si  la longueur de src est inférieure à n, strncpy() écrit des octets NULL supplémentaires dans dest pour
       s'assurer qu'un total de n octets ont été écrits.

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

           char *
           strncpy(char *dest, const char *src, size_t n)
           {
               size_t i;

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

               return dest;
           }

VALEUR RENVOYÉE

       Les fonctions strcpy() et strncpy() renvoient un pointeur sur la chaîne destination dest.

ATTRIBUTS

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

CONFORMITÉ

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

NOTES

       Certains programmeurs considèrent strncpy() comme inefficace et propice aux erreurs.  Si  le  programmeur
       sait  (c'est-à-dire  en ajoutant du code pour effectuer le test !) que la taille de dest est supérieure à
       la longueur de src, alors strcpy() peut être utilisée.

       Une façon correcte (et prévue) d'utiliser strncpy() est de copier une chaîne C vers un tampon de longueur
       fixe en s'assurant à la fois que le tampon n'est pas dépassé et que les octets  non  utilisés  du  tampon
       cible  sont  mis  à zéro (pour éviter d'éventuelles fuites d'informations si le tampon est destiné à être
       écrit sur un support  ou  transmis  à  un  autre  processus  à  l'aide  d'une  méthode  de  communication
       interprocessus).

       S'il  n'y  a  pas  d'octet  NULL final dans les n premiers octets de src, strncpy() génère une chaîne non
       terminée et l'affecte dans dest. Si buf est de longueur buflen, il est possible de forcer la chaîne à  se
       terminer en faisant appel à quelque chose comme :

           if (buflen > 0) {
               strncpy(buf, str, buflen - 1);
               buf[buflen - 1]= '\0';
           }

       (Bien  sûr,  la méthode précédente ne tient pas compte du fait que si la longueur de src est supérieure à
       buflen - 1 octets, des informations sont perdues lors de la copie vers dest.)

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

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

       Cette fonction est similaire à strncpy(), mais elle copie  au  plus  size - 1 octets  vers  dest,  ajoute
       toujours  un  octet  NULL  final  et  ne  complète  pas la cible avec des octets NULL additionnels. Cette
       fonction corrige certains des problèmes de strcpy() et strncpy(), mais l'appelant doit quand  même  gérer
       la  possibilité  d'une perte de données si size est trop petit. La valeur renvoyée par la fonction est la
       longueur de src, ce qui permet de détecter facilement une coupure : si la valeur renvoyée est  supérieure
       ou  égale  à  size,  c'est  qu'il  y a eu une perte de données. Si la perte de données est problématique,
       l'appelant doit soit vérifier les arguments  avant  l'appel,  soit  tester  la  valeur  renvoyée  par  la
       fonction.  strlcpy()  n'existe  pas dans glibc et n'est pas normalisée par POSIX mais est disponible sous
       Linux avec la bibliothèque libbsd.

BOGUES

       Si la chaîne de destination d'un strcpy() n'est pas suffisamment grande, n'importe quoi peut survenir. Un
       dépassement de tampon pour une chaîne de taille fixe est la technique favorite de pirates pour prendre le
       contrôle d'une machine. À chaque fois qu'un programme lit  ou  copie  des  données  dans  un  tampon,  le
       programme  doit  d'abord vérifier qu'il y a suffisamment de place. Ça peut ne pas être nécessaire si vous
       pouvez montrer qu'un dépassement est impossible, mais faites attention : les programmes changent au cours
       du temps, et ce qui était impossible peut devenir possible.

VOIR AUSSI

       bcopy(3), memccpy(3), memcpy(3), memmove(3),  stpcpy(3),  stpncpy(3),  strdup(3),  string(3),  wcscpy(3),
       wcsncpy(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                                                6 mars 2019                                         STRCPY(3)