sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
Gravar dados formatados em uma seqüência de caracteres.Versões mais seguras de algumas dessas funções estão disponível; consulte sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. swprintf e _swprintf_l não tem uma versão mais segura porque eles levam um count parâmetro.
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
template <size_t size>
int swprintf(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format [,
argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
locale_t locale [,
argument] ...
); // C++ only
Parâmetros
buffer
Local de armazenamento para saídacount
Número máximo de caracteres para armazenar a versão Unicode dessa função.format
Seqüência de caracteres de controle de formatoargument
Argumentos opcionaislocale
A localidade para usar.
Para obter mais informações, consulte Especificações de formato.
Valor de retorno
O número de caracteres gravadas ou – 1 se ocorreu um erro.If buffer ou format é um ponteiro nulo, o manipulador de parâmetro inválido é invocado, sistema autônomo descrito em Validação de parâmetro. Se a execução for permitida para continuar, essas funções retornam -1 e conjunto errno para 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 armazenadas no buffer, sem contar o caractere de largo nulo terminação.
Comentários
The sprintf função formata e armazena uma seqüência de caracteres e valores em buffer. Cada argument (se houver) é convertido e saída de acordo com a especificação de formato correspondente em format. O formato consiste em caracteres comuns e tenha o mesmo formulário e funcione sistema autônomo a format argumento para printf.Um caractere nulo é acrescentado após o último caractere escrito.Se copiar ocorrer entre cadeias de caracteres que se sobrepõem, o comportamento é indefinido.
Observação de segurança: |
---|
Using sprintf, não é possível para limitar o número de caracteres gravada, o que significa que o código usando sprintf é suscetível a estouros de buffer. Considere a possibilidade de usar a função relacionadas _snprintf, que especifica um número máximo de caracteres a serem gravados no buffer, ou usar _scprintf para determinar o tamanho um buffer é necessário.Além disso, certifique-se de que format não é uma seqüência de caracteres definida pelo usuário. |
swprintf é uma versão de caractere largo da sprintf; os argumentos de ponteiro swprintf são seqüências de caracteres largos. Detecção de erros em de codificaçãoswprintf pode ser diferente no sprintf. swprintf and fwprintf behave identically except that swprintf writes output to a string rather than to a destination of type FILE, and swprintf requires the countparameter to specify the maximum number of characters to be written.As versões dessas funções com o _l sufixo são idênticas exceto que usarem o parâmetro de localidade passado em vez da localidade do thread corrente.
In Visual C++ 2005, swprintf está de acordo com o ISO C padrão, que requer o segundo parâmetro, count, do tipo size_t. Para forçar o comportamento antigo não padrão, definir _CRT_NON_CONFORMING_SWPRINTFS. Em uma versão futura, o comportamento antigo pode ser removido, para que o código deve ser alterado para usar o novo comportamento conformes.
No C++, essas funções têm sobrecargas de modelo que invocam as suas similares do mais recentes, seguras dessas funções.Para obter mais informações, consulte Proteger overloads de modelo.
Mapeamentos de rotina de texto genérica
Rotina TCHAR.H |
_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 informações adicionais compatibilidade, consulte Compatibilidade na introdução.
Exemplo
// 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
// 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
Equivalente do NET Framework
Consulte também
Referência
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l