fscanf_s
, , _fscanf_s_l
fwscanf_s
, ,_fwscanf_s_l
Lit les données mises en forme d’un flux. Ces versions de fscanf
, , _fscanf_l
, fwscanf
, _fwscanf_l
ont des améliorations de sécurité, comme décrit dans les fonctionnalités de sécurité dans le CRT.
Syntaxe
int fscanf_s(
FILE *stream,
const char *format [,
argument ]...
);
int _fscanf_s_l(
FILE *stream,
const char *format,
_locale_t locale [,
argument ]...
);
int fwscanf_s(
FILE *stream,
const wchar_t *format [,
argument ]...
);
int _fwscanf_s_l(
FILE *stream,
const wchar_t *format,
_locale_t locale [,
argument ]...
);
Paramètres
stream
Pointeur vers la structure FILE
.
format
Chaîne de contrôle de format.
argument
Arguments facultatifs.
locale
Paramètres régionaux à utiliser.
Valeur retournée
Chacune de ces fonctions retourne le nombre de champs qu’elle convertit et affecte avec succè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é. Si une erreur se produit ou si la fin du flux de fichier est atteinte avant la première conversion, la valeur de retour est EOF
pour fscanf_s
et fwscanf_s
.
Ces fonctions valident leurs paramètres. S’il stream
s’agit d’un pointeur de fichier non valide ou format
s’il s’agit d’un pointeur null, ces fonctions appellent le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent EOF
et définissent errno
avec la valeur EINVAL
.
Notes
La fonction fscanf_s
lit les données à partir de la position actuelle de stream
aux emplacements éventuels fournis par argument
. Chaque argument
doit être un pointeur vers une variable d'un type qui correspond à un spécificateur de type dans format
. format
contrôle l’interprétation des champs d’entrée et a la même forme et fonction que l’argument pour ; consultez les champs de spécification format : scanf
et wscanf
fonctions pour une description de format
.scanf_s
format
fwscanf_s
est une version à caractères larges de fscanf_s
. L’argument format pour fwscanf_s
est une chaîne de caractères larges. Ces fonctions se comportent de la même façon si le flux est ouvert en mode ANSI. fscanf_s
ne prend pas en charge actuellement les entrées à partir d'un flux UNICODE.
La principale différence entre les fonctions plus sécurisées (repérables au suffixe _s
) et les autres est que les premières exigent la transmission de la taille en caractères de chaque champ de type c
, C
, s
, S
et [
en tant qu’argument de suite après la variable. Pour plus d’informations, consultez scanf_s
, , _scanf_s_l
wscanf_s
_wscanf_s_l
et scanf
Spécification de largeur.
Remarque
Le paramètre relatif à la taille est de type unsigned
, et non size_t
.
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 |
---|---|---|---|
_ftscanf_s |
fscanf_s |
fscanf_s |
fwscanf_s |
_ftscanf_s_l |
_fscanf_s_l |
_fscanf_s_l |
_fwscanf_s_l |
Spécifications
Fonction | En-tête requis |
---|---|
fscanf_s , _fscanf_s_l |
<stdio.h> |
fwscanf_s , _fwscanf_s_l |
<stdio.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// crt_fscanf_s.c
// This program writes formatted
// data to a file. It then uses fscanf to
// read the various data back from the file.
#include <stdio.h>
#include <stdlib.h>
FILE *stream;
int main( void )
{
long l;
float fp;
char s[81];
char c;
errno_t err = fopen_s( &stream, "fscanf.out", "w+" );
if( err )
printf_s( "The file fscanf.out was not opened\n" );
else
{
fprintf_s( stream, "%s %ld %f%c", "a-string",
65000, 3.14159, 'x' );
// Set pointer to beginning of file:
fseek( stream, 0L, SEEK_SET );
// Read data back from file:
fscanf_s( stream, "%s", s, _countof(s) );
fscanf_s( stream, "%ld", &l );
fscanf_s( stream, "%f", &fp );
fscanf_s( stream, "%c", &c, 1 );
// Output data read:
printf( "%s\n", s );
printf( "%ld\n", l );
printf( "%f\n", fp );
printf( "%c\n", c );
fclose( stream );
}
}
a-string
65000
3.141590
x
Voir aussi
E/S de flux
_cscanf_s
, , _cscanf_s_l
_cwscanf_s
, ,_cwscanf_s_l
fprintf_s
, , _fprintf_s_l
fwprintf_s
, ,_fwprintf_s_l
scanf_s
, , _scanf_s_l
wscanf_s
, ,_wscanf_s_l
sscanf_s
, , _sscanf_s_l
swscanf_s
, ,_swscanf_s_l
fscanf
, , _fscanf_l
fwscanf
, ,_fwscanf_l