Share via


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ída

  • sizeOfBuffer
    Número máximo de caracteres para armazenar.

  • format
    Seqüência de caracteres de controle de formato

  • argument
    Argumentos opcionais

  • locale
    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

Fluxo de i/O

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

Funções vprintf