Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Odczytuje sformatowane dane ze strumienia. Te wersje programu fscanf
, fwscanf
_fscanf_l
_fwscanf_l
, mają ulepszenia zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
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 ]...
);
Parametry
stream
Wskaźnik do FILE
struktury.
format
Ciąg kontroli formatu.
argument
Argumenty opcjonalne.
locale
Ustawienia regionalne do użycia.
Wartość zwracana
Każda z tych funkcji zwraca liczbę pól, które pomyślnie konwertuje i przypisuje. Wartość zwracana nie zawiera pól, które zostały odczytane, ale nie zostały przypisane. Wartość zwracana 0 wskazuje, że żadne pola nie zostały przypisane. Jeśli wystąpi błąd lub gdy koniec strumienia plików zostanie osiągnięty przed pierwszą konwersją, zwracana wartość to EOF
i fscanf_s
fwscanf_s
.
Te funkcje weryfikują swoje parametry. Jeśli stream
jest nieprawidłowym wskaźnikiem pliku lub format
jest wskaźnikiem o wartości null, te funkcje wywołują nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonanie jest dozwolone do kontynuowania, te funkcje zwracają EOF
i ustawiają wartość errno
EINVAL
.
Uwagi
Funkcja fscanf_s
odczytuje dane z bieżącej stream
pozycji do lokalizacji, które są podane przez argument
(jeśli istnieją). Każdy argument
musi być wskaźnikiem do zmiennej typu odpowiadającej specyfikatorowi typu w programie format
. format
steruje interpretacją pól wejściowych i ma taką samą formę i funkcję jak format
argument dla scanf_s
; zobacz Pola specyfikacji formatu: scanf
i wscanf
funkcje , aby uzyskać opis format
. fwscanf_s
jest wersją fscanf_s
szerokoznakową ; argument formatu do fwscanf_s
jest ciągiem o szerokim znaku. Te funkcje zachowują się identycznie, jeśli strumień jest otwarty w trybie ANSI. fscanf_s
obecnie nie obsługuje danych wejściowych ze strumienia UNICODE.
Główną różnicą między bardziej bezpiecznymi funkcjami (które mają _s
sufiks) i innymi wersjami jest to, że bardziej bezpieczne funkcje wymagają rozmiaru znaków każdego c
pola , , C
s
, S
i [
typu, które mają być przekazywane jako argument bezpośrednio po zmiennej. Aby uzyskać więcej informacji, zobacz _scanf_s_l
scanf_s
, , _wscanf_s_l
wscanf_s
i Width Specification (Specyfikacja szerokości).scanf
Uwaga
Parametr rozmiaru jest typu unsigned
, a nie size_t
.
Wersje tych funkcji, które mają _l
sufiks, są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych zamiast bieżących ustawień regionalnych wątku.
Mapowania procedur tekstu ogólnego
TCHAR.H rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_ftscanf_s |
fscanf_s |
fscanf_s |
fwscanf_s |
_ftscanf_s_l |
_fscanf_s_l |
_fscanf_s_l |
_fwscanf_s_l |
Wymagania
Function | Wymagany nagłówek |
---|---|
fscanf_s , _fscanf_s_l |
<stdio.h> |
fwscanf_s , _fwscanf_s_l |
<stdio.h> lub <wchar.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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
Zobacz też
We/Wy strumienia
_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