Compartilhar via


vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l

A saída formatada de gravação usando um ponteiro para uma lista de argumentos. Versões mais seguras dessas funções estão disponíveis; consulte vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.

int vsprintf(
   char *buffer,
   const char *format,
   va_list argptr 
); 
int _vsprintf_l(
   char *buffer,
   const char *format,
   locale_t locale,
   va_list argptr 
); 
int vswprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   va_list argptr 
);
int _vswprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);
int __vswprintf_l(
   wchar_t *buffer,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);
template <size_t size>
int vsprintf(
   char (&buffer)[size],
   const char *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsprintf_l(
   char (&buffer)[size],
   const char *format,
   locale_t locale,
   va_list argptr 
); // C++ only
template <size_t size>
int vswprintf(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vswprintf_l(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
); // C++ only

Parâmetros

  • buffer
    Local de armazenamento para saída.

  • count
    Número máximo de caracteres a ser armazenado, na versão de UNICODE dessa função.

  • format
    Especificação de formato.

  • argptr
    Ponteiro para a lista de argumentos.

  • locale
    A localidade a ser usada.

Valor de retorno

vsprintf e vswprintf retornam o número de caracteres gravados, sem incluir o caractere nulo de terminação ou um valor negativo, no caso de ocorrer um erro de saída. Se buffer ou format for um ponteiro nulo, essas funções invoca o manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro. Se a execução puder continuar, essas funções retornarão -1 e definirão errno a EINVAL.

Para obter informações sobre esses e outros códigos de erro, consulte _doserrno, errno, _sys_errlist, and _sys_nerr.

Comentários

Cada uma dessas funções usa um ponteiro para uma lista de argumentos, e nos formatos e grava os dados dados para a memória apontada por buffer.

As versões dessas funções com o sufixo _l são idênticas, exceto que usam o parâmetro de localidade passado em vez da localidade de thread atual.

Observação de segurançaObservação de segurança

Usando vsprintf, não veja nenhuma forma de limitar o número de caracteres gravados, o que significa que o código que usa essa função é improvável que a excesso de buffer.Use _vsnprintf em vez disso, ou chame _vscprintf para determinar como grande um buffer é necessário.Além disso, verifique se format não é uma cadeia de caracteres definida pelo usuário.Para obter mais informações, consulte Evitando saturações de buffer.

vswprintf estão de acordo com o Padrão ISO C, que exige o segundo parâmetro, count, do tipo size_t. Para forçar o comportamento fora do padrão antigo, defina _CRT_NON_CONFORMING_SWPRINTFS. que o antigo comportamento não pode estar em uma versão futura, assim que o código deve ser alterado para usar o novo comportamento compatível.

No C++, essas funções têm as sobrecargas de modelo que invocam as correspondentes seguras mais recentes dessas funções. Para obter mais informações, consulte Sobrecargas de modelo seguras.

Mapeamentos da rotina de texto genérico

Rotina TCHAR.H

_UNICODE & _MBCS não definido

_MBCS definido

_UNICODE definido

_vstprintf

vsprintf

vsprintf

vswprintf

_vstprintf_l

_vsprintf_l

_vsprintf_l

_vswprintf_l

Requisitos

Rotina

Cabeçalho necessário

Cabeçalhos opcionais

vsprintf, _vsprintf_l

<stdio.h> e <stdarg.h>

<varargs.h>*

vswprintf, _vswprintf_l

<stdio.h> ou <wchar.h> e <stdarg.h>

<varargs.h>*

* Necessário para a compatibilidade de UNIX V.

Para informações adicionais de compatibilidade, consulte Compatibilidade na Introdução.

Exemplo

// crt_vsprintf.c
// compile with: /W3
// This program uses vsprintf to write to a buffer.
// The size of the buffer is determined by _vscprintf.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

void test( char * format, ... )
{
    va_list args;
    int     len;
    char    *buffer;

    // retrieve the variable arguments
    va_start( args, format );
    
    len = _vscprintf( format, args ) // _vscprintf doesn't count
                                + 1; // terminating '\0'
    
    buffer = (char*)malloc( len * sizeof(char) );

    vsprintf( buffer, format, args ); // C4996
    // Note: vsprintf is deprecated; consider using vsprintf_s instead
    puts( buffer );

    free( buffer );
}

int main( void )
{
   test( "%d %c %d", 123, '<', 456 );
   test( "%s", "This is a string" );
}
  

Equivalência do .NET Framework

System::String::Format

Consulte também

Referência

E/S de fluxo

Funções vprintf

Sintaxe de especificação de formato: funções printf e and wprintf

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

va_arg, va_copy, va_end, va_start