Provided by: manpages-fr-dev_3.65d1p1-1_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 le caractère nul (« \0 ») final 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 BUGS).

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

       Si  la  longueur de src est inférieure à n, strncpy() écrit des caractères nuls supplémentaires vers 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

   Multithreading (voir pthreads(7))
       Les fonctions strcpy() et strncpy() sont sûres dans un contexte multithread.

CONFORMITÉ

       SVr4, BSD 4.3, C89, C99.

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 voulue) 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 (peut-être pour éviter la fuite d'informations si le tampon n'est pas à écrire  sur
       un   support  ou  à  transmettre  à  un  autre  processus  à  l'aide  d'une  technique  de  communication
       interprocessus).

       S'il n'y a pas de caractère nul de fin 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 :

           strncpy(buf, str, buflen - 1);
           if (buflen > 0)
               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, les informations sont perdues lors de la copie vers dest.)

       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 nul final et ne remplit la cible avec des (autres) octets nuls. Cette fonction  corrige
       certains  des problèmes de strcpy() et strncpy(), mais l'appelant doit quand même gérer la possibilité de
       pertes de données si size est trop petit. La valeur de retour de la fonction est la longueur de  src,  ce
       qui  permet de détecter facilement une coupure : si la valeur renvoyée est supérieure à 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. strlcpy() n'existe pas dans
       glibc et n'est pas normalisé 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 changes 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 3.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006). Nicolas François  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».