sscanf
, _sscanf_l
, swscanf
, _swscanf_l
Leia dados formatados de uma cadeia de caracteres. Versões mais seguras dessas funções estão disponíveis; confira sscanf_s
, _sscanf_s_l
, swscanf_s
, _swscanf_s_l
.
Sintaxe
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_l(
const char *buffer,
const char *format,
_locale_t locale [,
argument ] ...
);
int swscanf(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_l(
const wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument ] ...
);
Parâmetros
buffer
Dados armazenados
format
Cadeia de caracteres de controle de formato. Para obter mais informações, consulte Sintaxe de especificação de formato.
argument
Argumentos opcionais
locale
A localidade a ser usada
Valor retornado
Cada uma dessas funções retorna o número de campos convertidos e atribuídos com êxito, portanto, 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 sscanf
lê dados de buffer
no local fornecido por cada argument
. Todo argument
deve ser um ponteiro para uma variável com 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.
Para obter informações sobre caracteres de campo do tipo scanf, consulte scanf
caracteres de campo de tipo. Para obter informações sobre campos de especificação de formato scanf, consulte Campos de especificação de formato.
Importante
Ao ler uma cadeia de caracteres com sscanf
, especifique sempre uma largura para o formato %s
(por exemplo, "%32s
" em vez de "%s
");; caso contrário, entrada formatada de modo inadequado poderá facilmente causar um estouro de buffer.
swscanf
é uma versão de caractere largo de sscanf
; os argumentos para swscanf
são cadeias de caracteres largas. sscanf
não lida com caracteres hexadecimais multibyte. swscanf
não lida com caracteres hexadecimais de largura total Unicode ou de "zona de compatibilidade". Caso contrário, swscanf
e sscanf
comportam-se de modo idêntico.
As versões dessas funções com o sufixo _l
são idênticas, com a exceção de usarem o parâmetro de localidade passado, em vez da localidade do thread atual.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.H |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_stscanf |
sscanf |
sscanf |
swscanf |
_stscanf_l |
_sscanf_l |
_sscanf_l |
_swscanf_l |
Requisitos
Rotina | Cabeçalho necessário |
---|---|
sscanf , _sscanf_l |
<stdio.h> |
swscanf , _swscanf_l |
<stdio.h> ou <wchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
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:
sscanf( tokenstring, "%80s", s ); // C4996
sscanf( tokenstring, "%c", &c ); // C4996
sscanf( tokenstring, "%d", &i ); // C4996
sscanf( tokenstring, "%f", &fp ); // C4996
// Note: sscanf is deprecated; consider using sscanf_s instead
// 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
fscanf
, _fscanf_l
, fwscanf
, _fwscanf_l
scanf
, _scanf_l
, wscanf
, _wscanf_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
, __swprintf_l
snprintf
, _snprintf
, _snprintf_l
, _snwprintf
, _snwprintf_l