STRNCMP |
Compare les N caractères de la chaîne |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
int strncmp(const char *str1,const char *str2,size_t n) |
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. |
n | Ce paramètre permet d'indiquer le nombre de caractères à 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 permet de comparer les «n» premiers caractères de la chaîne de caractères «str1» à la chaîne de caractères «str2».
Remarques
- S'il y a moins de n caractères dans l'une ou l'autre chaîne de caractères, la comparaison se termine lorsque le premier null est rencontré.
- Limitation du nombre de caractères comparés : Contrairement à strcmp, comparant jusqu'à la fin de la chaîne de caractères, strncmp compare au maximum n caractères. Cela permet d'éviter des problèmes de performances sur de longues chaînes et de réduire les risques d'accès mémoire non sécurisé. Exemple :
- Ne garantit pas l'arrêt à n caractères si '\0' est atteint : Si un '\0' est rencontré avant n caractères, strncmp s'arrête automatiquement.
Cela permet d'éviter un dépassement de mémoire mais peut produire des résultats différents de strcmp. Exemple :
Ici, result == 0 car strncmp s'arrête au '\0' de str1.
- Sensible à la casse des caractères : Comme strcmp, strncmp fait une comparaison sensible à la casse. Exemple :
- Plus sécurisé que strcmp, mais avec des limites : strncmp évite certains dépassements de mémoire en limitant la comparaison à n caractères, mais cela n'empêche pas un accès hors limites si l'une des chaînes est trop courte. Exemple risqué :
- Utilisé pour le tri et la recherche : strncmp est souvent utilisé pour le tri alphabétique et les comparaisons partielles dans des algorithmes de recherche. Exemple de tri :
- Comparaison d'identifiants ou de préfixes : strncmp est utile pour vérifier si une chaîne commence par un préfixe donné. Exemple :
- Alternative moderne : std::string::compare : En C++, il est préférable d'utiliser std::string au lieu de strncmp, car il est plus sûr et plus facile à utiliser. Exemple :
- std::string str1 = "Hello";
- std::string str2 = "HelloWorld";
- if (str1.compare(0, 5, str2, 0, 5) == 0) {
- std::cout << "Les 5 premiers caractères sont identiques !" << std::endl;
- }
Ici, result == 0 car les trois premiers caractères sont identiques.
Ici, result != 0 car 'H' et 'h' ont des valeurs ASCII différentes. Pour une comparaison insensible à la casse, il faut utiliser strncasecmp (GNU) ou transformer les chaînes en minuscules avant la comparaison.
Il faut toujours vérifier que les pointeurs ne sont pas nullptr avant d'appeler strncmp.
Cela trie les mots en fonction de leurs trois premières lettres.
Cela permet de vérifier si url commence par "https".
std::string::compare est plus lisible et évite les erreurs de manipulation de pointeurs.
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - strcmp
Langage de programmation - C - Référence de procédures et fonctions - strncmp
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 261.