sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
Grave dados formatados em uma seqüência de caracteres.Estas são as versões do sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
int _sprintf_s_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
locale_t locale [,
argument] ...
);
int swprintf_s(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument]...
);
int _swprintf_s_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
locale_t locale [,
argument]…
);
template <size_t size>
int sprintf_s(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int swprintf_s(
wchar_t (&buffer)[size],
const wchar_t *format [,
argument]...
); // C++ only
Parâmetros
buffer
Local de armazenamento para saídasizeOfBuffer
Número máximo de caracteres para armazenar.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 gravados ou – 1 se ocorreu um erro.If buffer or format is a null pointer, sprintf_s and swprintf_s return -1 and set errno to EINVAL.
sprintf_sRetorna o número de bytes armazenados em buffer, sem contar o caractere nulo de terminação.swprintf_sRetorna o número de caracteres de largura armazenados em buffer, sem contar o caractere de amplo terminação nulo.
Comentários
O sprintf_s função formata e armazena uma seqüência de caracteres e valores em buffer.Cada argument (se houver) são convertidos 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 funcionar como o 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.
Uma das principal diferenças entre sprintf_s e sprintf é que sprintf_s verifica a seqüência de caracteres de formato para caracteres válidos de formatação, enquanto sprintf só verifica se o buffer ou uma seqüência de caracteres de formato são NULL ponteiros.Se uma seleção falhar, o manipulador de parâmetro inválido é invocado, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, a função retornará -1 e conjuntos de errno para EINVAL.
A diferença principal entre sprintf_s e sprintf é que sprintf_s aceita um parâmetro de comprimento especifica o tamanho do buffer de saída em caracteres.Se o buffer é muito pequeno para o texto que está sendo impresso o buffer é definido como uma seqüência vazia, e o manipulador de parâmetro inválido é invocado.Ao contrário do snprintf, sprintf_s garante que o buffer será null-encerrado (a menos que o tamanho do buffer é zero).
swprintf_sé uma versão de caractere largo de sprintf_s; os argumentos de ponteiro para swprintf_s são seqüências de caracteres largos.Detecção de erros de codificação swprintf_s pode ser diferente no sprintf_s.As versões dessas funções com o _l sufixo são idênticas exceto que eles usam o parâmetro de localidade passado em vez da localidade do thread atual.
No C++, a utilização dessas funções é simplificado pela sobrecargas do modelo; os métodos sobrecarregados podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e eles podem substituir automaticamente os funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.Para obter mais informações, consulte Proteger Overloads de modelo.
Existem versões do sprintf_s que oferecem controle adicional sobre o que acontece se o buffer é muito pequeno.Para obter mais informações, consulte _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.
Mapeamentos de rotina de texto genérico
TCHAR.Rotina H |
_ Unicode & _ MBCS do arquivo não definido |
_ MBCS do arquivo definido |
_ Unicode definido |
---|---|---|---|
_stprintf_s |
sprintf_s |
sprintf_s |
swprintf_s |
_stprintf_s_l |
_sprintf_s_l |
_sprintf_s_l |
_swprintf_s_l |
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
sprintf_s, _sprintf_s_l |
<stdio.h> |
swprintf_s, _swprintf_s_l |
<stdio.h> ou <wchar.h> |
Para obter informações adicionais de compatibilidade, consulte compatibilidade na introdução.
Exemplo
// crt_sprintf_s.c
// This program uses sprintf_s 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_s( buffer, 200, " String: %s\n", s );
j += sprintf_s( buffer + j, 200 - j, " Character: %c\n", c );
j += sprintf_s( buffer + j, 200 - j, " Integer: %d\n", i );
j += sprintf_s( buffer + j, 200 - j, " Real: %f\n", fp );
printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
// crt_swprintf_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf_s fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
Equivalência do .NET Framework
[M:System::String::Format]
Consulte também
Referência
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l