sprintf
, _sprintf_l
, swprintf
, _swprintf_l
, __swprintf_l
Grave os dados formatados em uma cadeia de caracteres. Versões mais seguras de algumas dessas funções estão disponíveis; consulte sprintf_s
, _sprintf_s_l
swprintf_s
,, _swprintf_s_l
. As versões seguras do swprintf
e _swprintf_l
o usam o tamanho do buffer como um parâmetro.
Sintaxe
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int _sprintf_l(
char *buffer,
const char *format,
_locale_t locale [,
argument] ...
);
int swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);
int _swprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
int __swprintf_l(
wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
template <size_t size>
int sprintf(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
char (&buffer)[size],
const char *format,
_locale_t locale [,
argument] ...
); // C++ only
Parâmetros
buffer
Local de armazenamento para a saída
count
Número máximo de caracteres a armazenar a versão Unicode dessa função.
format
Cadeia de caracteres de controle de formato
argument
Argumentos opcionais
locale
A localidade a ser usada.
Para obter mais informações, consulte Especificações de formato.
Valor Retornado
O número de caracteres gravados ou-1 se ocorreu um erro. Se buffer
ou format
for um ponteiro nulo, 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
.
sprintf
retorna o número de bytes armazenados em buffer
, sem contar o caractere nulo de terminação. swprintf
retorna o número de caracteres largos armazenados em buffer
, sem contar o caractere largo nulo de terminação.
Comentários
A função sprintf
formata e armazena uma série de caracteres e valores em buffer
. Cada argument
(se houver) é convertido e gerado de acordo com a especificação de formato correspondente em format
. O formato consiste em caracteres comuns e tem o mesmo formato e função que o argumento format
para printf
. Um caractere nulo é acrescentado após o último caractere escrito. Se ocorrer cópia entre cadeias de caracteres que se sobrepõem, o comportamento será indefinido.
Importante
Usando sprintf
, aqui não há maneira de limitar o número de caracteres gravados, o que significa que o código que usa sprintf
é suscetível a estouros de buffer. Considere usar a função _snprintf
Related, que especifica um número máximo de caracteres para gravar buffer
ou usar _scprintf
para determinar o tamanho necessário do buffer. Verifique também se format
não é uma cadeia de caracteres definida pelo usuário.
a partir do Windows 10 versão 2004 (build 19041), a printf
família de funções imprime exatamente números de ponto flutuante reapresentáveis de acordo com as regras IEEE 754 para o arredondamento. nas versões anteriores do Windows, exatamente os números de ponto flutuante reapresentáveis que terminam em ' 5 ' sempre arredondam. O IEEE 754 declara que eles devem ser arredondados para o dígito par mais próximo (também conhecido como "arredondamento do banco"). Por exemplo, printf("%1.0f", 1.5)
e printf("%1.0f", 2.5)
deve ser arredondado para 2. Anteriormente, 1,5 seria arredondado para 2 e 2,5 seria arredondado para 3. Essa alteração afeta apenas números exatamente reapresentáveis. Por exemplo, 2,35 (que, quando representado na memória, está mais próximo de 2.35000000000000008) continua a arredondar até 2,4. O arredondamento feito por essas funções agora também respeita o modo de arredondamento de ponto flutuante definido por fesetround
. Anteriormente, o arredondamento sempre escolheu FE_TONEAREST
o comportamento. essa alteração afeta apenas os programas criados usando Visual Studio 2019 versão 16,2 e posterior. Para usar o comportamento de arredondamento de ponto flutuante herdado, vincule com ' legacy_stdio_float_rounding. obj '.
swprintf
é uma versão de caractere largo de sprintf
; os argumentos de ponteiro para swprintf
são cadeias de caracteres largos. A detecção de erros de codificação no swprintf
pode ser diferente de sprintf
. swprintf
e fwprintf
se comportar de forma idêntica, exceto swprintf
gravar a saída em uma cadeia de caracteres em vez de um destino do tipo FILE
e swprintf
exigir que o parâmetro de contagem especifique o número máximo de caracteres a serem gravados. As versões dessas funções com o _l
sufixo são idênticas, exceto pelo fato de que usam o parâmetro de localidade passado em vez da localidade do thread atual.
swprintf
está em conformidade com o padrão ISO C, que requer o segundo parâmetro, count
, do tipo size_t
. Para forçar o comportamento antigo não padrão, defina _CRT_NON_CONFORMING_SWPRINTFS
. Em uma versão futura, o comportamento antigo pode ser removido, então o código deve ser alterado para usar o novo comportamento compatível.
No C++, essas funções têm sobrecargas de modelo que invocam os equivalentes mais novos e seguros dessas funções. Para obter mais informações, consulte Sobrecargas de modelo seguro.
Mapeamentos da rotina de texto genérico
TCHAR.H rotina |
_UNICODE &_MBCS Não definido |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
_swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Requisitos
Rotina | Cabeçalho necessário |
---|---|
sprintf , _sprintf_l |
<stdio.h> |
swprintf , _swprintf_l |
<stdio.h> ou <wchar.h> |
Para obter mais informações sobre compatibilidade, consulte Compatibilidade.
Exemplo: usar sprintf
para formatar dados
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf to format various
// data and place them in the string named buffer.
#include <stdio.h>
int main( void )
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f;
// Format and print various data:
j = sprintf( buffer, " String: %s\n", s ); // C4996
j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
// Note: sprintf is deprecated; consider using sprintf_s instead
printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
Output:
String: computer
Character: l
Integer: 35
Real: 1.732053
character count = 79
Exemplo: tratamento de código de erro
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
wrote 11 characters
wrote -1 characters
Confira também
E/S de fluxo
fprintf
, _fprintf_l
, fwprintf
, _fwprintf_l
printf
, _printf_l
, wprintf
, _wprintf_l
scanf
, _scanf_l
, wscanf
, _wscanf_l
sscanf
, _sscanf_l
, swscanf
, _swscanf_l
vprintf
Funções