MEMCHR |
Recherche mémoire |
---|---|
Langage C | 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.
Algorithme
MODULE MEMCHR(ptr, c, n) * Parcours les n premiers octets de la zone mémoire pointée par ptr BOUCLE POUR i ← 0 JUSQU'A n - 1 FAIRE * Si l'octet à la position i est égal à c SI ptr[i] = c ALORS * Retourner un pointeur vers la position trouvée RETOURNE ptr + i FIN SI FIN BOUCLE POUR * Si aucune correspondance n'a été trouvée, retourner NULL RETOURNE NULL |
Remarques
- Fonctionnalité principale : La fonction memchr permet de localiser un premier octet spécifique dans un bloc de mémoire. Elle recherche dans une zone de mémoire de taille donnée (spécifiée en octets) le premier caractère correspondant à un octet donné. Si trouvé, elle retourne un pointeur vers cette position, sinon elle retourne NULL.
- Recherche sur des données binaires : Contrairement à des fonctions comme strchr, étant utilisées pour les chaînes de caractères (composées de caractères terminés par un \0), memchr opère sur des blocs de mémoire, ce qui permet de rechercher des motifs dans des données binaires ou des zones de mémoire n'étant pas nécessairement des chaînes de caractères C.
- Cas de retour null : Si le caractère recherché n'est pas trouvé dans la zone mémoire spécifiée, memchr retourne NULL. Cela permet de vérifier rapidement si le caractère est absent sans nécessiter une boucle manuelle de recherche.
- Gestion de la valeur du caractère recherché : Le paramètre c est un entier, mais il est traité comme un octet (valeur comprise entre 0 et 255). En d'autres termes, bien que c soit un entier, il est automatiquement converti en un unsigned char avant d'être comparé aux octets de la mémoire. Cela permet de rechercher toute valeur d'octet, y compris les caractères non imprimables ou non affichables.
- Utilisation avec des types de données complexes : memchr est particulièrement utile dans des situations où on travaille avec des structures de données binaires, comme les fichiers binaires, les images, les données cryptographiques, ou tout autre type de données non textuelles. Elle permet d'éviter de devoir manipuler ces données comme des chaînes de caractères.
- Performances : La fonction memchr est optimisée pour parcourir un bloc de mémoire de manière rapide, en utilisant des techniques comme l'accès direct aux mémoires et des instructions processeur optimisées pour la recherche. Cela la rend plus rapide que d'autres méthodes de recherche dans de grandes quantités de données brutes.
- Limitation liée à la taille de la zone mémoire : La fonction memchr ne peut pas détecter les dépassements de mémoire ou des erreurs d'accès mémoire. L'appel à cette fonction est donc dangereux si la zone mémoire spécifiée est incorrecte ou si la taille donnée dépasse la taille réelle du bloc de mémoire. Une mauvaise gestion des pointeurs ou de la taille peut entraîner des comportements indéfinis.
Exemple
Voici un exemple montrant l'utilisation de cette fonction :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main() {
- char String[255];
- memset(&String,'*',50);
- String[25] = '?';
- String[50] = 0;
- printf("'?' FIND ? %s\n",memchr(String,'?',50) ? "TRUE":"FALSE");
- printf("'a' FIND ? %s\n",memchr(String,'a',50) ? "TRUE":"FALSE");
- printf("'*' FIND ? %s\n",memchr(String,'*',50) ? "TRUE":"FALSE");
- printf("'0' FIND ? %s\n",memchr(String,'0',50) ? "TRUE":"FALSE");
- printf("Retour du '?' = %s\n",memchr(String,'?',50));
- 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 : Mardi, le 28 juillet 2015