Udostępnij przez


vsscanf, vswscanf

Odczytuje sformatowane dane z ciągu. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz vsscanf_s, vswscanf_s.

Składnia

int vsscanf(
   const char *buffer,
   const char *format,
   va_list arglist
);
int vswscanf(
   const wchar_t *buffer,
   const wchar_t *format,
   va_list arglist
);

Parametry

buffer
Przechowywane dane

format
Ciąg kontroli formatu. Aby uzyskać więcej informacji, zobacz Pola specyfikacji formatu: scanf i wscanf funkcje.

arglist
Lista argumentów zmiennej.

Wartość zwracana

Każda z tych funkcji zwraca liczbę pól, które zostały pomyślnie przekonwertowane i przypisane. 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. Wartość zwracana jest EOF dla błędu lub jeśli koniec ciągu zostanie osiągnięty przed pierwszą konwersją.

Jeśli buffer lub format jest wskaźnikiem NULL , wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie może kontynuować, te funkcje zwracają wartość -1 i ustawiają wartość errnoEINVAL.

Aby uzyskać informacje o tych i innych kodach błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja vsscanf odczytuje dane z buffer lokalizacji, które są podane przez każdy argument na arglist liście argumentów. Każdy argument na liście musi być wskaźnikiem do zmiennej, która ma typ odpowiadający specyfikatorowi typu w programie format. format Argument steruje interpretacją pól wejściowych i ma taką samą formę i funkcję jak format argument funkcjiscanf. Jeśli kopiowanie odbywa się między ciągami nakładającymi się, zachowanie jest niezdefiniowane.

Ważne

Podczas odczytywania vsscanf ciągu należy zawsze określić szerokość formatu %s (na przykład "%32s" zamiast "%s"), w przeciwnym razie niepoprawnie sformatowane dane wejściowe mogą spowodować przepełnienie buforu.

vswscanf jest wersją szerokoznakową ; vsscanfargumenty, które mają vswscanf być ciągami o szerokim znaku. vsscanf nie obsługuje znaków szesnastkowy wielobajtowych. vswscanf Nie obsługuje znaków szesnastkowe ani "strefa zgodności" w formacie Unicode o pełnej szerokości. vswscanf W przeciwnym razie i vsscanf zachowują się identycznie.

Mapowania procedur tekstu ogólnego

Procedura TCHAR.H _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_vstscanf vsscanf vsscanf vswscanf

Wymagania

Procedura Wymagany nagłówek
vsscanf <stdio.h>
vswscanf <stdio.h> lub <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_vsscanf.c
// compile with: /W3
// This program uses vsscanf to read data items
// from a string named tokenstring, then displays them.

#include <stdio.h>
#include <stdarg.h>

int call_vsscanf(char *tokenstring, char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vsscanf(tokenstring, format, arglist);
    va_end(arglist);
    return result;
}

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:
    call_vsscanf(tokenstring, "%80s", s);
    call_vsscanf(tokenstring, "%c", &c);
    call_vsscanf(tokenstring, "%d", &i);
    call_vsscanf(tokenstring, "%f", &fp);

    // 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

Zobacz też

We/Wy strumienia
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vsscanf_s, vswscanf_s