Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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