Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       strcmp, strncmp - Comparer deux chaînes

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <string.h>

       int strcmp(const char *s1, const char *s2);
       int strncmp(const char s1[.n], const char s2[.n], size_t n);

DESCRIPTION

       La  fonction  strcmp()  compare  les deux chaînes s1 et s2. La locale n'est pas prise en compte (pour une
       comparaison basée sur la locale, consultez strcoll(3)). La comparaison est effectuée sur  des  caractères
       non signés.

       strcmp() retourne un entier indiquant le résultat de la comparaison comme suit :

       -  0 si s1 et s2 sont égales ;

       -  une valeur négative si s1 est inférieure à s2 ;

       -  une valeur positive si s1 est supérieure à s2.

       La  fonction  strncmp()  est similaire, mais elle ne compare (au plus) que les n premiers octets de s1 et
       s2.

VALEUR RENVOYÉE

       Les fonctions strcmp() et strncmp() renvoient un entier inférieur, égal ou supérieur à zéro si s1 (ou ses
       n premiers octets) est respectivement inférieure, égale ou supérieure à s2.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌───────────────────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├───────────────────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │strcmp(), strncmp()                                                    │ Sécurité des threads │ MT-Safe │
       └───────────────────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

VERSIONS

       POSIX.1 ne spécifie uniquement que :

              Le  signe  d'une valeur non nulle renvoyée doit être déterminé par le signe de la différence entre
              les valeurs de la première paire d'octets (interprétées comme des  unsigned  char)  qui  différent
              dans les chaînes comparées.

       Dans  la  glibc,  et  comme  dans  la  plupart  des  implémentations, la valeur retournée est le résultat
       arithmétique de la soustraction du dernier octet comparé de s2 au dernier octet comparé dans s1  (si  les
       deux caractères sont identiques, la différence est 0).

STANDARDS

       C11, POSIX.1-2008.

HISTORIQUE

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

EXEMPLES

       Le  programme  suivant  peut  être  utilisé  pour  illustrer le fonctionnement de strcmp() (recevant deux
       arguments) et strncmp() (recevant trois arguments). Tout d'abord, quelques exemples utilisant strcmp() :

           $ ./string_comp ABC ABC
           <str1> et <str2> sont égales
           $ ./string_comp ABC AB      # le code ASCII de  'C' est 67;  'C' - '\0' = 67
           <str1> est supérieure à <str2> (67)
           $ ./string_comp ABA ABZ     # le code ASCII de 'A' est 65; le code ASCII de 'Z' est 90
           <str1> est inférieure à <str2> (-25)
           $ ./string_comp ABJ ABC
           <str1> est supérieure à <str2> (7)
           $ ./string_comp $'\201'   # 0201 - 0101 = 0100 (ou 64 en décimal)
           <str1> est supérieure à <str2> (64)

       Le dernier exemple utilise une syntaxe  spécifique  à  bash(1)  pour  générer  un  chaîne  de  caractères
       contenant un code ASCII 8 bits ; le resultat met en évidence que la comparaison des chaînes travaille sur
       des caractères non signés.

       Et quelques exemples utilisant strncmp() :

           $ ./string_comp ABC AB 3
           <str1> est supérieure à <str2> (67)
           $ ./string_comp ABC AB 2
           <str1> et <str2> ont leurs deux premiers octets égaux

   Source du programme

       /* string_comp.c

          Sous licence GNU General Public v2 ou postérieure.
       */
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       int
       main(int argc, char *argv[])
       {
           int res;

           if (argc < 3) {
               fprintf(stderr, "Utilisation : %s <str1> <str2> [<len>]\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           if (argc == 3)
               res = strcmp(argv[1], argv[2]);
           else
               res = strncmp(argv[1], argv[2], atoi(argv[3]));

           if (res == 0) {
               printf("<str1> et <str2> sont égaux");
               if (argc > 3)
                   printf(" pour les %d premiers octets\n", atoi(argv[3]));
               printf("\n");
           } else if (res < 0) {
               printf("<str1> est inférieure à <str2> (%d)\n", res);
           } else {
               printf("<str1> est supérieure à <str2> (%d)\n", res);
           }

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       memcmp(3), strcasecmp(3), strcoll(3), string(3), strncasecmp(3),  strverscmp(3),  wcscmp(3),  wcsncmp(3),
       ascii(7)

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>, Grégoire  Scano  <gregoire.scano@malloc.fr>
       et Lucien Gentis <lucien.gentis@waika9.com>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.