sscanf
, , _sscanf_l
swscanf
, ,_swscanf_l
Lisent les données mises en forme d’une chaîne. Des versions plus sécurisées de ces fonctions sont disponibles ; voir , , swscanf_s
_sscanf_s_l
, _swscanf_s_l
.sscanf_s
Syntaxe
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_l(
const char *buffer,
const char *format,
_locale_t locale [,
argument ] ...
);
int swscanf(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_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 Syntaxe de spécification de format.
argument
Arguments facultatifs
locale
Paramètres régionaux à utiliser
Valeur retournée
Chacune de ces fonctions retourne le nombre de champs correctement convertis et affectés ; la valeur de retour n’inclut pas les champs qui ont été lus mais qui n’ont pas été affectés. La valeur de retour 0 indique qu'aucun champ n'a été assigné. La valeur de retour est EOF
en cas d’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ètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent -1 et définissent errno
avec la valeur EINVAL
.
Pour plus d’informations sur ces codes et d’autres codes d’erreur, consultez errno
, _doserrno
, _sys_errlist
et _sys_nerr
.
Notes
La fonction sscanf
lit les données à partir de buffer
à l’emplacement indiqué par chaque argument
. Chaque argument
doit être un pointeur désignant une variable d’un type qui correspond à un spécificateur de type dans format
. L’argument format
contrôle l’interprétation des champs d’entrée et a les mêmes forme et fonction que l’argument format
de la fonction scanf
. Si la copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.
Pour plus d’informations sur les caractères de champ de type scanf, consultez scanf
les caractères de champ de type. Pour plus d’informations sur les champs de spécification de format scanf, consultez Champs de spécification de format.
Important
Lors de la lecture d’une chaîne avec sscanf
, spécifiez toujours une largeur pour le %s
format (par exemple, «%32s
» au lieu de «%s
») ; sinon, une entrée mal mise en forme peut facilement entraîner un dépassement de mémoire tampon.
swscanf
est une version à caractères larges de sscanf
; les arguments de swscanf
sont des chaînes à caractères larges. sscanf
ne gère pas les caractères hexadécimaux multioctets. swscanf
ne gère pas les caractères hexadécimaux hexadécimaux ou « zone de compatibilité » Unicode. Sinon, swscanf
et sscanf
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 |
sscanf |
sscanf |
swscanf |
_stscanf_l |
_sscanf_l |
_sscanf_l |
_swscanf_l |
Spécifications
Routine | En-tête requis |
---|---|
sscanf , _sscanf_l |
<stdio.h> |
swscanf , _swscanf_l |
<stdio.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.
#include <stdio.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:
sscanf( tokenstring, "%80s", s ); // C4996
sscanf( tokenstring, "%c", &c ); // C4996
sscanf( tokenstring, "%d", &i ); // C4996
sscanf( tokenstring, "%f", &fp ); // C4996
// Note: sscanf is deprecated; consider using sscanf_s instead
// Output the data read
printf( "String = %s\n", s );
printf( "Character = %c\n", c );
printf( "Integer: = %d\n", i );
printf( "Real: = %f\n", fp );
}
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
Voir aussi
E/S de flux
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