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