MEMCHR |
Recherche mémoire |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
void *memchr(const void *tampon, int caractere, size_t n) |
Paramètres
Nom | Description |
---|---|
tampon | Ce paramètre permet d'indiquer le tampon dans lequel la recherche doit avoir lieu |
n | Ce paramètre permet d'indiquer la taille du tampon en octets |
caractere | Ce paramètre permet d'indiquer la caractère à rechercher |
Description
Cette fonction permet de rechercher un caractère dans le tampon de «n» octets.
Remarques
- La fonction memchr() recherche dans le tableau pointé par tampon la première occurrence de caractere dans les premiers caractères du compteur.
- La fonction memchr() renvoie un pointeur sur la première occurrence de caractere dans le tampon, ou elle retourne un pointeur null si caractere n'est pas trouvé.
- Définition et utilité : La fonction memchr est définie dans la bibliothèque <cstring> (ou <string.h> en C) et sert à rechercher un octet spécifique dans une zone de mémoire. Elle permet de trouver la première occurrence d'un caractère (sous forme d'octet) dans un bloc de mémoire. Cette fonction est couramment utilisée dans les programmes où il est nécessaire de traiter des données binaires ou des chaînes de caractères en mémoire sans se soucier des types de données.
- Retour du pointeur ou nullptr : Si l'octet recherché est trouvé, memchr retourne un pointeur vers cet octet dans la zone mémoire donnée. Si l'octet n'est pas trouvé après avoir examiné tous les num octets spécifiés, la fonction retourne nullptr. Cela permet aux développeurs de vérifier facilement si une recherche a abouti et de travailler avec des zones de mémoire de manière flexible.
- Traitement des octets : Un aspect important de memchr est que la recherche se fait sur des octets et non pas sur des caractères de type char ou wchar_t. Le paramètre value est un entier représentant un octet, et la comparaison est faite sur les valeurs binaires de ces octets. Cela rend memchr très utile pour travailler avec des données binaires, comme les fichiers, les tampons ou les tableaux d'octets.
- Non-spécifique aux chaînes de caractères : Bien que le nom de la fonction fasse penser à une opération sur des chaînes de caractères, memchr n'est pas limitée aux chaînes de caractères null-terminées. Elle peut être utilisée sur n'importe quelle zone de mémoire, qu'il s'agisse de données binaires, de structures ou de tableaux. Cela la rend plus flexible que des fonctions comme strchr, ne fonctionnant que sur des chaînes de caractères.
- Cas où value est égal à 0 : Si la valeur de value est 0, memchr recherchera le premier octet nul (\0) dans la zone de mémoire. Cela peut être utile pour rechercher la fin de chaînes null-terminées ou pour traiter des données binaires où un octet nul marque une fin ou un séparateur. Toutefois, il est important de noter que la recherche sera effectuée sur les num premiers octets, ce qui signifie qu'un octet nul peut être trouvé à n'importe quelle position dans la zone mémoire spécifiée.
- Optimisation et performance : La fonction memchr est généralement optimisée pour la recherche rapide dans des blocs de mémoire. Elle peut être implémentée de manière plus efficace dans certaines bibliothèques standard en utilisant des techniques comme les recherches par blocs ou l'utilisation d'algorithmes spécialisés pour améliorer la vitesse d'exécution. Dans les systèmes où la performance est cruciale (par exemple, dans le traitement de fichiers volumineux), memchr peut offrir une recherche plus rapide qu'une boucle de recherche manuelle.
- Limitation à une recherche linéaire : Il est important de noter que memchr effectue une recherche linéaire dans les num octets spécifiés. Cela signifie que, dans des scénarios où la zone de mémoire est très grande et que la valeur recherchée est relativement rare, la fonction pourrait ne pas être aussi rapide que d'autres algorithmes de recherche plus spécialisés (comme les recherches binaires, par exemple). Cependant, elle reste efficace pour des tâches de recherche simples et des situations où la taille de la zone mémoire n'est pas excessive.
Exemple
Voici un exemple montrant l'utilisation de cette fonction :

- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
-
- int main() {
- char String[255];
- memset(&String,'*',50);
- String[25] = '?';
- String[50] = 0;
- std::cout << "'?' FIND ? " << (memchr(String,'?',50) ? "TRUE":"FALSE") << std::endl;
- std::cout << "'a' FIND ? " << (memchr(String,'a',50) ? "TRUE":"FALSE") << std::endl;
- std::cout << "'*' FIND ? " << (memchr(String,'*',50) ? "TRUE":"FALSE") << std::endl;
- std::cout << "'0' FIND ? " << (memchr(String,'0',50) ? "TRUE":"FALSE") << std::endl;
- std::cout << "Retour du '?' = " << (char *) (memchr(String,'?',50)) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
'?' FIND ? TRUE'a' FIND ? FALSE
'*' FIND ? TRUE
'0' FIND ? FALSE
Retour du '?' = ?************************
Voir également
Langage de programmation - C - Référence de procédures et fonctions - memchr
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 174.
Dernière mise à jour : Lundi, le 3 août 2015