Compartilhar via


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