STRCMP |
Compare des chaines |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
int strcmp(const char *str1,const char *str2) |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la première chaîne de caractères ASCIZ à comparer. |
str2 | Ce paramètre permet d'indiquer la deuxième chaîne de caractères ASCIZ à comparer. |
Retour
Valeur | Description |
---|---|
< 0 (Moins que zéro) | Ces valeurs permettent d'indiquer que str1 est inférieur à str2. |
0 (Zéro) | Cette valeur permet d'indiquer que str1 est égal à str2. |
> 0 (Supérieur à zéro) | Ces valeurs permettent d'indiquer que str1 est supérieur à str2. |
Description
Cette fonction effectue la comparaison de deux chaînes de caractères.
Remarques
- Comparaison basée sur le code ASCII : strcmp compare les caractères un par un en fonction de leur valeur ASCII. Exemple :
Ici, "avocat" est considéré comme inférieur à "banane", car 'a' (97) est plus petit que 'b' (98), donc strcmp retourne une valeur négative.
- S'arrête dès qu'une différence est trouvée : strcmp ne compare pas toute la chaîne si une différence est trouvée tôt. Exemple :
- Retourne 0 pour des chaînes égales : Lorsque deux chaînes sont exactement identiques, strcmp retourne 0. Exemple :
- Dépend de la casse (case-sensitive) : strcmp est sensible à la casse, ce qui signifie que "Bonjour" et "bonjour" sont considérés comme différents. Exemple :
- Problème de nullptr et accès mémoire : strcmp ne vérifie pas si les pointeurs sont valides. Comparer nullptr entraînera un segmentation fault. Exemple (dangereux) :
- Alternative moderne avec std::string : En C++, on utilise généralement std::string, permettant une comparaison plus intuitive avec ==. Exemple :
- std::string s1 = "avocat";
- std::string s2 = "banane";
- if (s1 < s2) {
- std::cout << "s1 vient avant s2" << std::endl;
- }
- Différence avec strncmp (comparaison limitée) : strncmp permet de comparer uniquement les n premiers caractères, contrairement à strcmp comparant toute la chaîne de caractères. Exemple :
Ici, la comparaison s'arrête au troisième caractère, car 'c' (99) est plus petit que 'd' (100).
C'est une façon classique de tester si deux chaînes sont égales en C++.
Si une comparaison insensible à la casse est nécessaire, utilisez strcasecmp (sous Linux) ou _stricmp (sous Windows).
Toujours vérifier la validité des pointeurs avant d'appeler strcmp.
Cette approche est plus sécurisée et plus simple que strcmp.
Ici, seules les trois premières lettres ("app") sont comparées.
Exemple
Voici un exemple montrant l'utilisation de cette fonction :

- #include <iostream>
- #include <cstring>
-
- int main()
- {
- std::cout << "StrCmp(\"Gladir\",\"Gladir\") = " << strcmp("Gladir","Gladir") << std::endl;
- std::cout << "StrCmp(\"Gladir\",\"Gladir.com\") = " << strcmp("Gladir","Gladir.com") << std::endl;
- std::cout << "StrCmp(\"Gladir.com\",\"Gladir\") = " << strcmp("Gladir.com","Gladir") << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
StrCmp("Gladir","Gladir") = 0StrCmp("Gladir","Gladir.com") = -1
StrCmp("Gladir.com","Gladir") = 1
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - strrchr
Langage de programmation - C - Référence de procédures et fonctions - strcmp
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 253.