Notatka
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_sszerokoznakową ; 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 cpola , , Cs, Si [ typu, które mają być przekazywane jako argument bezpośrednio po zmiennej. Aby uzyskać więcej informacji, zobacz _scanf_s_lscanf_s, , _wscanf_s_lwscanf_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