sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l

 

Date de publication : novembre 2016

Pour obtenir la dernière documentation sur Visual Studio 2017 RC, consultez Documentation Visual Studio 2017 RC.

Lit des données à partir d’une chaîne au format. Ces versions de sscanf, _sscanf_l, swscanf, _swscanf_l ont des améliorations de sécurité, comme décrit dans fonctionnalités de sécurité de la bibliothèque CRT.

int sscanf_s(  
   const char *buffer,  
   const char *format [,  
   argument ] ...  
);  
int _sscanf_s_l(  
   const char *buffer,  
   const char *format,  
   locale_t locale [,  
   argument ] ...  
);  
int swscanf_s(  
   const wchar_t *buffer,  
   const wchar_t *format [,  
   argument ] ...  
);  
int _swscanf_s_l(  
   const wchar_t *buffer,  
   const wchar_t *format,  
   locale_t locale [,  
   argument ] ...  
);  

Paramètres

buffer
Données stockées

format
Chaîne de contrôle de format. Pour plus d’informations, consultez des champs de spécification de Format : fonctions scanf et wscanf.

argument
Arguments facultatifs

locale
Les paramètres régionaux à utiliser

Chacune de ces fonctions retourne le nombre de champs qui sont convertis et attribués ; la valeur de retour n’inclut pas les champs qui ont été lues mais pas attribués. La valeur de retour 0 indique qu'aucun champ n'a été assigné. La valeur de retour est EOF pour une erreur ou si la fin de la chaîne est atteinte avant la première conversion.

Si buffer ou format est un NULL pointeur, le Gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent -1 et attribuent à errno la valeur EINVAL.

Pour plus d’informations sur les autres codes d’erreur, consultez errno, _doserrno, _sys_errlist et _sys_nerr.

Le sscanf_s fonction lit les données à partir de buffer dans l’emplacement qui est fourni par chaque argument. Les arguments après la chaîne de format spécifient des pointeurs vers des variables qui ont un type qui correspond au spécificateur de type dans format. Contrairement à la version la moins sécurisée sscanf, un paramètre de taille de mémoire tampon est requis lorsque vous utilisez les caractères de champ de type c, C, s, S, ou qui sont inclus dans les jeux de contrôles de la chaîne []. La taille de mémoire tampon de caractères doit être fournie comme paramètre supplémentaire immédiatement après chaque paramètre de mémoire tampon qui en a besoin. Par exemple, si vous lisez dans une chaîne, la taille du tampon pour cette chaîne est passée comme suit :

wchar_t ws[10];

swscanf_s(in_str, L"%9s", ws, (unsigned)_countof(ws)); // buffer size is 10, width specification is 9

La taille de la mémoire tampon inclut le caractère Null de fin. Un champ de spécification de largeur peut être utilisé pour s’assurer que le jeton qui est lu se tiendront dans la mémoire tampon. Si aucun champ de spécification de largeur n'est utilisé, et si le jeton lu est trop grand pour la mémoire tampon, aucune valeur n'est écrite dans cette mémoire tampon.

Dans le cas des caractères, un caractère unique peut être lu comme suit :

wchar_t wc;

swscanf_s(in_str, L"%c", &wc, 1);

Cet exemple lit un caractère unique dans la chaîne d’entrée et puis elle le stocke dans une mémoire tampon de caractères larges. Lorsque vous lisez plusieurs caractères pour les chaînes terminées par non null, entiers non signés sont utilisés en tant que la spécification de la largeur et la taille du tampon.

char c[4];

sscanf_s(input, "%4c", &c, (unsigned)_countof(c)); // not null terminated

Pour plus d’informations, consultez scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l et scanf caractères du champ de Type.

System_CAPS_ICON_note.jpg Remarque

Le paramètre relatif à la taille est de type unsigned, et non size_t. Lors de la compilation pour des cibles 64 bits, utilisez un cast statique pour convertir _countof ou sizeof à la taille correcte des résultats.

Le format contrôles d’argument des champs de l’interprétation de l’entrée et a la même forme et fonction que la format argument pour le scanf_s (fonction). Si une copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.

swscanf_sest une version à caractère élargi de sscanf_s; les arguments de swscanf_s sont des chaînes à caractères larges. sscanf_sne gère pas les caractères hexadécimaux multioctets. swscanf_sne gère pas hexadécimal de pleine chasse Unicode ou des caractères de la « zone de compatibilité ». Sinon, swscanf_s et sscanf_s se comportent de la même façon.

Les versions de ces fonctions avec le suffixe _l sont identiques, sauf qu'elles utilisent les paramètres régionaux passés au lieu des paramètres régionaux du thread actuel.

Mappages de routines de texte générique

Routine TCHAR.H_UNICODE et _MBCS non définis_MBCS défini_UNICODE défini
_stscanf_ssscanf_ssscanf_sswscanf_s
_stscanf_s_l_sscanf_s_l_sscanf_s_l_swscanf_s_l
RoutineEn-tête requis
sscanf_s, _sscanf_s_l<stdio.h>
swscanf_s, _swscanf_s_l<stdio.h> ou <wchar.h>

Pour plus d'informations sur la compatibilité, voir Compatibilité.

// crt_sscanf_s.c  
// This program uses sscanf_s to read data items  
// from a string named tokenstring, then displays them.  
  
#include <stdio.h>  
#include <stdlib.h>  
  
int main( void )  
{  
   char  tokenstring[] = "15 12 14...";  
   char  s[81];  
   char  c;  
   int   i;  
   float fp;  
  
   // Input various data from tokenstring:  
   // max 80 character string plus NULL terminator  
   sscanf_s( tokenstring, "%s", s, (unsigned)_countof(s) );  
   sscanf_s( tokenstring, "%c", &c, (unsigned)sizeof(char) );  
   sscanf_s( tokenstring, "%d", &i );  
   sscanf_s( tokenstring, "%f", &fp );  
  
   // Output the data read  
   printf_s( "String    = %s\n", s );  
   printf_s( "Character = %c\n", c );  
   printf_s( "Integer:  = %d\n", i );  
   printf_s( "Real:     = %f\n", fp );  
}  

String    = 15  
Character = 1  
Integer:  = 15  
Real:     = 15.000000  

Consultez la page Parse méthodes, telles que System::Double::Parse.

Flux d’e/s
fscanf, _fscanf_l, fwscanf, _fwscanf_l
scanf, _scanf_l, wscanf, _wscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
snprintf, _snprintf, _snprintf_l, _snwprintf, _snwprintf_l

Afficher: