Compartilhar via


vsscanf, vswscanf

Lê dados formatados de uma cadeia de caracteres. Versões mais seguras dessas funções estão disponíveis; confira vsscanf_s, vswscanf_s.

Sintaxe

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

Parâmetros

buffer
Dados armazenados

format
Cadeia de caracteres de controle de formato. Para obter mais informações, consulte Campos de especificação de formato: scanf e wscanf funções.

arglist
Lista de argumentos variáveis.

Valor retornado

Cada uma dessas funções retorna o número de campos que são convertidos e atribuídos com êxito. O valor retornado não inclui campos que foram lidos, mas não atribuídos. Um valor retornado igual a 0 indica que nenhum campo foi atribuído. O valor retornado será EOF para um erro ou se o fim da cadeia de caracteres for alcançado antes da primeira conversão.

Se buffer or format for um NULL ponteiro, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essas funções retornarão -1 e definirão errno como EINVAL.

Para obter informações sobre esses e outros códigos de erro, confira errno, _doserrno, _sys_errlist e _sys_nerr.

Comentários

A função vsscanf lê dados de buffer nos locais fornecidos por cada argumento na lista de argumentos arglist. Cada argumento na lista deve ser um ponteiro para uma variável de um tipo que corresponde a um especificador de tipo em format. O argumento format controla a interpretação dos campos de entrada e tem o mesmo formato e a mesma função que o argumento format para a função scanf. Se ocorrer cópia entre cadeias de caracteres que se sobrepõem, o comportamento será indefinido.

Importante

Quando você usa vsscanf para ler uma cadeia de caracteres, sempre especifique uma largura para o formato %s (por exemplo, "%32s" em vez de "%s"); caso contrário, a entrada formatada incorretamente pode causar uma saturação de buffer.

vswscanf é uma versão de caractere largo de vsscanf; os argumentos para vswscanf são cadeias de caracteres largas. vsscanf não lida com caracteres hexadecimais multibyte. vswscanf não lida com caracteres hexadecimais de largura total Unicode ou de "zona de compatibilidade". Caso contrário, vswscanf e vsscanf comportam-se de modo idêntico.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_vstscanf vsscanf vsscanf vswscanf

Requisitos

Rotina Cabeçalho necessário
vsscanf <stdio.h>
vswscanf <stdio.h> ou <wchar.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

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

Confira também

E/S de fluxo
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vsscanf_s, vswscanf_s