Partilhar via


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

sistema::String::Format

Consulte também

Referência

Fluxo de E/S

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