STRSTR |
Chaîne dans la chaîne |
---|---|
Langage C | string.h |
Syntaxe
char *strstr(const char *source,const char *search); |
Paramètres
VNom | Description |
---|---|
source | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant la source. |
search | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ à rechercher. |
Retour
Valeur | Description |
---|---|
NULL | Cette valeur permet d'indiquer qu'aucune correspondance n'a pas été trouvé dans la recherche de la chaîne de caractères «source». |
pointeur | Ces valeurs permettent d'indiquer un pointeur vers la première occurrence dans la chaîne de caractères «source» de la séquence entières de caractères spécifiés dans la chaîne de caractères search. |
Description
Cette fonction permet de rechercher la chaîne de caractères «search» dans la chaîne de caractères «source». La recherche effectué dans la chaîne de caractères utilise le format du langage de programmation C, lequel utilise le caractère ASCII 0 afin d'indiquer la fin d'une chaîne de caractères. Ainsi, par conséquent, la recherche n'inclura pas le caractère ASCII 0 lors de sa recherche et dès qu'il rencontrera le caractère ASCII 0 il arrêtera la recherche.
Algorithme
MODULE strstr(source, search) c = POINTEUR search POINTEUR search ← POINTEUR search + 1 SI c ≠ CODE ASCII 0 ALORS RETOURNER source FIN SI len = strlen(search) BOUCLE FAIRE BOUCLE FAIRE sc = POINTEUR source POINTEUR source ← POINTEUR source + 1 SI PAS sc ALORS RETOURNER NULL FIN SI TANT QUE sc ≠ c BOUCLE TANT QUE (strncmp(source, search, len) ≠ 0 RETOURNER (source - 1) |
Remarques
- Le processus de recherche de la correspondance n'inclus pas les caractères NUL de terminaison (ASCII 0), mais il arrête au caractère NUL.
- Si la chaîne de caractères search est une chaîne de caractères vides, la chaîne de caractères source entière est retourné par la fonction strstr. Toutefois, la bibliothèque libc version 4.5.26 ou version inférieur dans Linux ne supporte pas correctement cette fonctionnalité. Ce bogue fut corriger à partir de la version 4.6.27 de la bibliothèque libc de Linux. Tandis que si vous utilisez le compilateur Visual C++ de Microsoft, un gestionnaire de paramètres non valides est appelés et EINVAL devra retourner la valeur 0 pour fonctionner de façon conforme aux autres compilateurs de langage de programmation C.
- La fonction strstr est conforme aux normes C89, C99 et ANSI/ISO 9899-1990, contrairement à la fonction strcasestr, qu'utilise de nombreux programmeurs dans leurs projets GNU, pour ne pas faire de distinction entre les minuscules et les majuscules.
- Certains compilateurs C sont affectés par les paramètres régionaux des fonctions setlocale et _wsetlocale. Vous devriez donc consulter la documentation du compilateur C que vous utilisez pour savoir si votre compilateur modifie le comportement de la fonction strstr en fonction de l'un de ses 2 fonctions.
- Si vous avez besoin de traiter des chaînes de caractères Unicode ou des chaînes de caractères multi-caractères, vous devriez plutôt utilisé la fonction _mbsstr.
- GNU C Compiler : Il faut utilisé le paramètre «-l c» du compilateur gcc pour avoir accès à la bibliothèque contenant la fonction strstr. La bibliothèque est normalement inclus automatiquement.
- Faille de sécurité : La fonction strstr peut être affecté par un problème de saturation de la mémoire. Ainsi, un problème de saturation de la mémoire peut se produire pour attaquer un système car ils peuvent permettre l'exécution de code arbitraire, et ainsi provoquer une élévation injustifié des privilèges.
- C versus C++ : En langage de programmation C, une seule syntaxe de la fonction strstr est autorisé, tandis qu'en langage de programmation C++, de nombreux compilateurs, comme le Visual C++, propose 2 syntaxes supplémentaires pour cette fonction.
- La fonction strstr peut être utilisé dans un gestionnaire d'interruption, un gestionnaire de signal ou un processus léger.
Exemples
Voici un exemple montrant comme afficher le contenu de la chaîne de caractères à partir de «Gladir.com» inclusivement :
Essayer maintenant !
on obtiendra le résultat suivant :
Gladir.com contenu dedans !L'exemple suivant permet d'effectuer le remplacement de «gladir.com» par «gladir.ca» dans la chaine de caractères recherché :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main()
- {
- char source[] = "Chaine de caracteres contenant gladir.com !";
- char search[] = "gladir.com";
- char* p;
-
- p = strstr(source, search);
- if (p) {
- strcpy(p, "gladir.ca");
- printf("%s", source);
- } else {
- puts("Cette chaine de caractères ne contient pas gladir.com");
- }
- return 0;
- }
on obtiendra le résultat suivant :
Chaine de caracteres contenant gladir.caVoir également
Langage de programmation - C++ - Référence procédures et fonctions - strstr
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 266.