SSCANF |
Chaîne de recherche formaté |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
int sscanf(const char *tampon,const *texte,...) |
Paramètres
Nom | Description |
---|---|
tampon | Ce paramètre permet d'indiquer le tampon recevant les données |
texte | Ce paramètre permet d'indiquer le texte à écrire dans le tampon |
Description
Cette fonction permet la lecture de texte suivant un certain format à partir d'un tampon.
Remarques
- La fonction sscanf() est identique à scanf() sauf que les données sont lues à partir du tableau pointé par tampon plutôt que stdin (entrée standard).
- La valeur de retour est égale au nombre de variables auxquelles des valeurs ont été réellement affectées. Ce nombre ne comprend pas les champs ayant été ignorés lors de l'utilisation du modificateur de commande de format *. Une valeur de zéro signifie qu'aucun champ n'a été attribué et un EOF indique qu'une erreur s'est produite avant la première affectation.
- Utilisation pour extraire des données d'une chaîne : sscanf est utilisée pour analyser des chaînes contenant plusieurs données formatées. Exemple :
- Retourne le nombre de conversions réussies : sscanf retourne le nombre de champs correctement extraits, ce qui permet de vérifier si l'opération a réussi. Exemple :
- Gestion des espaces et des séparateurs : Par défaut, sscanf ignore les espaces, tabulations et nouvelles lignes entre les valeurs. Exemple :
- Vérification des erreurs et sécurité : sscanf ne signale pas directement les erreurs, il faut vérifier le retour pour éviter des comportements indéfinis. Mauvais exemple :
- Limitations de sécurité et alternatives : sscanf ne vérifie pas les dépassements de mémoire lors de la lecture des chaînes (%s). Solution : Limiter la taille des entrées :
- Lecture de formats spécifiques : sscanf peut traiter différents types de données et même des formats complexes. Exemple pour lire une date :
- Utilisation avec des expressions régulières et alternatives modernes : sscanf n'a pas de support natif pour les expressions régulières, ce qui peut limiter son usage pour des formats complexes. Pour des analyses avancées, utiliser :
- std::regex (C++11) pour les correspondances avancées.
- std::istringstream pour de l'analyse plus contrôlé.
Ici, sscanf extrait 42 en int, 3.14 en float, et "hello" en char[].
Ici, res vaudra 1 car seul 100 peut être converti en int, tandis que "abc" échoue.
Il extraira 123, 456 et 789 même si les séparateurs sont variés.
Il est recommandé d'initialiser les variables avant l'appel.
Une alternative plus sécurisée en C++ est std::istringstream de <sstream>.
Cela permet d'extraire 2024, 2 et 6 séparément.
Exemple avec std::regex :
Exemple
Voici un exemple permettant d'extraire trois valeurs d'une chaîne de caractères :

on obtiendra le résultat suivant :
N1 = 7N2 = 4
S1 = Bonjour
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - fscanf
Langage de programmation - C++ - Référence de procédures et fonctions - scanf
Langage de programmation - C - Référence de procédures et fonctions - sscanf
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 250.