scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
Odczyt sformatowane dane z Standardowy strumień wejściowy.Są to wersje scanf, _scanf_l, wscanf, _wscanf_l z ulepszeń zabezpieczeń, zgodnie z opisem w Funkcje zabezpieczeń w CRT.
int scanf_s(
const char *format [,
argument]...
);
int _scanf_s_l(
const char *format,
locale_t locale [,
argument]...
);
int wscanf_s(
const wchar_t *format [,
argument]...
);
int _wscanf_s_l(
const wchar_t *format,
locale_t locale [,
argument]...
);
Parametry
format
Ciąg formatu formantu.argument
Argumentów opcjonalnych.locale
Ustawienia regionalne używane.
Wartość zwracana
Zwraca liczbę pól pomyślnie przekonwertowane i przypisane; zwracana wartość nie zawiera pola, które były odczytać, ale nie są przypisane.Zwracana wartość wynosząca 0 wskazuje, że przydzielono żadnych pól.Wartość zwracana jest EOF dla błąd lub jeśli znak końca pliku lub znak końca ciągu w pierwszej próbie odczytać znak.Jeśli format jest NULL wskaźnik, program obsługi nieprawidłowy parametr jest wywoływana, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, scanf_s i wscanf_s zwrotu EOF i ustawić errno do EINVAL.
Aby uzyskać informacje o tych i innych kodów błędów, zobacz _doserrno, errno, _sys_errlist i _sys_nerr.
Uwagi
scanf_s Funkcja odczytuje dane z Standardowy strumień wejściowy stdin i zapisuje dane do lokalizacji określonej przez argument.Każdy argument musi być wskaźnik do zmiennej typu, który odpowiada specyfikatora typu w format.Jeśli kopiowanie odbywa się między ciągami, które nakładają się, zachowanie jest niezdefiniowane.
wscanf_sjest ona szerokich znaków do scanf_s; format argument wscanf_s jest ciągiem szerokich znaków.wscanf_si scanf_s zachowują się identycznie identycznie, jeśli strumień jest otwarty w trybie ANSI.scanf_saktualnie nie obsługuje dane wejściowe ze strumienia UNICODE.
Wersje te funkcje za pomocą _l sufiks są identyczne z tym, że używają przekazany zamiast bieżących ustawień regionalnych wątek parametr ustawień regionalnych.
Unlike scanfand wscanf, scanf_sand wscanf_srequire the buffer size to be specified for all input parameters of type c, C, s, S, or [.Rozmiar bufora w znakach jest przekazywana jako dodatkowy parametr natychmiast po wskaźnik do buforu lub zmiennej.Na przykład jeśli czyta ciąg, rozmiar buforu dla tego ciągu przechodzi się następujące zmiany:
char s[10];
scanf_s("%9s", s, _countof(s)); // buffer size is 10, width specification is 9
Rozmiar buforu zawiera zakończenie null.Szerokość pola Specyfikacja może służyć do zapewnienia, że token w zmieści się w buforze.Jeśli nie szerokość pola Specyfikacja jest używana, a token odczytać jest zbyt duży, aby zmieścić się w buforze, nic nie zostaną zapisane do tego buforu.
[!UWAGA]
Parametr rozmiaru jest typu unsigned, a nie size_t.
Poniższy przykład pokazuje, że parametr rozmiaru buforu opisuje maksymalną liczbę znaków, nie bajtów.W wywołaniu wscanf_s, szerokość znaków, który jest wskazywany przez typ buforu nie pasuje szerokość znaków, który jest wskazywany przez określenie formatu.
wchar_t ws[10];
wscanf_s("%9S", ws, _countof(ws));
S Specyfikatora formatu oznacza użycie szerokość znaków, który znajduje się "na domyślną szerokość, który jest obsługiwany przez funkcję naprzeciwko".Szerokość znaków jest jednobajtową, ale funkcja obsługuje znaki dwubajtowe.W tym przykładzie odczytuje w ciągu maksymalnie 9 znaków pojedynczej bajt szerokości i umieszcza je w buforze podwójnej bajt szerokości znaku.Znaki są traktowane jako wartości jednobajtowych; dwa pierwsze znaki są przechowywane w ws[0], drugie dwie są przechowywane w ws[1]i tak dalej.
W przypadku znaków jeden może otrzymują pojedynczy znak brzmienie:
char c;
scanf_s("%c", &c, 1);
Podczas czytania wielu znaków zakończonych ciągi inne niż null, liczby całkowite są używane jako szerokość specyfikacji i rozmiar buforu.
char c[4];
scanf_s("%4c", &c, _countof(c)); // not null terminated
Aby uzyskać więcej informacji, zobacz scanf Specyfikacja szerokość.
Tekst rodzajowy rutynowych mapowania
TCHAR.Rozpoczęto wykonywanie procedury h |
_UNICODE & _MBCS nie zdefiniowany |
_MBCS, definicja |
_UNICODE, definicja |
---|---|---|---|
_tscanf_s |
scanf_s |
scanf_s |
wscanf_s |
_tscanf_s_l |
_scanf_s_l |
_scanf_s_l |
_wscanf_s_l |
Aby uzyskać więcej informacji, zobacz pól specyfikacji formatu — scanf funkcje jak i wscanf.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
---|---|
scanf_s, _scanf_s_l |
<stdio.h> |
wscanf_s, _wscanf_s_l |
<stdio.h> lub <wchar.h> |
Konsola nie jest obsługiwana w Windows Store aplikacji.Związanych z konsolą, dojścia do strumienia standard stdin, stdout, i stderr, muszą być przeniesione, aby funkcje uruchomieniowej C mogą być użyte w Windows Store aplikacji.Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.
Przykład
// crt_scanf_s.c
// This program uses the scanf_s and wscanf_s functions
// to read formatted input.
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int i,
result;
float fp;
char c,
s[80];
wchar_t wc,
ws[80];
result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,
&wc, 1, s, _countof(s), ws, _countof(ws) );
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c,
wc, s, ws);
result = wscanf_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
&wc, 1, s, _countof(s), ws, _countof(ws) );
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp,
c, wc, s, ws);
}
Odpowiednik w programie .NET Framework
Zobacz też Parse metod, takich jak System::Double::Parse.
Zobacz też
Informacje
fscanf — przetwarza dane, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l