sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
Gravar dados formatados em uma seqüência de caracteres.Essas são sistema autônomo versões de sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l com aprimoramentos de segurança conforme descrito em Aprimoramentos 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 gravadas ou – 1 se ocorreu um erro.If buffer ou format é um ponteiro nulo, sprintf_s e swprintf_s retornar -1 e conjunto errno para EINVAL.
sprintf_s Retorna o número de bytes armazenados em buffer, sem contar o caractere nulo de terminação. swprintf_s Retorna o número de caracteres largos armazenadas no buffer, sem contar o caractere de largo nulo terminação.
Comentários
The sprintf_s 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.
Uma das principal diferenças entre sprintf_s e sprintf é o sprintf_s verifica a seqüência de caracteres de formato para caracteres de formatação válido, ao passo que sprintf verifica somente se o buffer de seqüência de caracteres de formato ou estão NULL ponteiros. Se uma seleção falhar, 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, a função retorna -1 e define errno para EINVAL.
A diferença principal entre sprintf_s e sprintf é o sprintf_s obtém um parâmetro de comprimento Especifica o dimensionar do buffer de saída em caracteres. Se o buffer é pequeno demais para o texto que está sendo impresso e o buffer é conjunto como uma seqüência vazia e o parâmetro inválido manipulador é chamado.Ao contrário de snprintf, sprintf_s garante que o buffer será ser terminado com nulo (a menos que o dimensionar do buffer é zero).
swprintf_s é uma versão de caractere largo da sprintf_s; os argumentos de ponteiro swprintf_s são seqüências de caracteres largos. Detecção de erros em de codificaçãoswprintf_s pode ser diferente no sprintf_s. 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.
No C++, usando essas funções é simplificado pelo modelo sobrecargas; sobrecargas de podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de dimensionar) e eles podem substituir automaticamente funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.For more information, see Proteger overloads de modelo.
Existem versões de sprintf_s que oferecem controle adicional sobre o que acontece se o buffer é pequeno demais. For more information, see _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.
Mapeamentos de rotina de texto genérica
Rotina TCHAR.H |
_UNICODE & _MBCS não definido |
_MBCS 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 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 );
}
Output: String: computer Character: l Integer: 35 Real: 1.732053 character count = 79
// 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 );
}
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