vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l

Escribir con formato salida mediante un puntero a una lista de argumentos.Éstas son versiones de vsnprintf, _vsnprintf, _vsnprintf_l, _vsnwprintf, _vsnwprintf_l con mejoras de seguridad como se describe en Características de seguridad en CRT.

int vsnprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   locale_t locale,
   va_list argptr 
);
int _vsnwprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const wchar_t *format,
   va_list argptr 
);
int _vsnwprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);
template <size_t size>
int _vsnprintf_s(
   char (&buffer)[size],
   size_t count,
   const char *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsnwprintf_s(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   va_list argptr 
); // C++ only

Parámetros

  • buffer
    Ubicación de almacenamiento para el resultado.

  • sizeOfBuffer
    El tamaño de buffer para la salida, en bytes.

  • count
    Número máximo de caracteres a escribir (sin incluir la null final), o _TRUNCATE.

  • format
    Especificación de formato.

  • argptr
    puntero a la lista de argumentos.

  • locale
    la configuración regional a utilizar.

Para obtener más información, vea Especificaciones de formato.

Valor devuelto

vsnprintf_s,_vsnprintf_sy _vsnwprintf_sdevuelven el número de caracteres de tipo, sin incluir la null final, o un valor negativo si un error de salida aparece.vsnprintf_s es idéntico a _vsnprintf_s.vsnprintf_s se incluye para la compatibilidad con el estándar ANSI._vnsprintf se conserva por compatibilidad con versiones anteriores.

Si el almacenamiento necesario almacenar los datos y un carácter null final supera sizeOfBuffer, se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros, a menos que count es _TRUNCATE, en este caso tanto de la cadena que caben en buffer se escribe y -1 devuelto.Si la ejecución continúa después del controlador no válido de parámetro, estas funciones establecen buffer en una cadena vacía, establecen errno a ERANGE, y devuelven -1.

Si buffer o format es un puntero de NULL , o si count es menor o igual que cero, se invoca el controlador no válido del parámetro.Si la ejecución puede continuar, este errno establecido funciones a EINVAL y retorno -1.

condiciones de error

Condition

Return

errno

buffer esNULL

-1

EINVAL

format esNULL

-1

EINVAL

count <= 0

-1

EINVAL

elsizeOfBuffer demasiado pequeño (y count ! = _TRUNCATE)

-1 (y buffer establecido en una cadena vacía)

ERANGE

Comentarios

Cada una de estas funciones contiene un puntero a una lista de argumentos, los formatos y prepara a count los caracteres de los datos especificados en memoria designada por a buffer y anexa un carácter null final.

Si count es _TRUNCATE, después estas funciones escriben tanto de la cadena que caben en buffer mientras deja el sitio para un carácter null final.Si la cadena completa (con finalizar null) se ajusta en buffer, después estas funciones devuelven el número de caracteres tipo (sin incluir la null final); si no, estas funciones devuelven -1 para indicar que el truncamiento se produjo.

Las versiones de estas funciones con el sufijo de _l son idénticas salvo que utilizan el parámetro locale pasado en lugar de la configuración regional del subproceso actual.

Nota de seguridadNota sobre la seguridad

Asegúrese de que format no es una cadena definida por el usuario.Para obtener más información, vea Para evitar las saturaciones del búfer.

[!NOTA]

Para asegurarse de que haya espacio para la null final, es seguro que count es estrictamente menor que la longitud del búfer, o utilizar _TRUNCATE.

En C++, mediante estas funciones es simplificado con sobrecargas de plantilla; las sobrecargas pueden deducir la longitud de búfer automáticamente (que elimina la necesidad de especificar un argumento de tamaño) y automáticamente pueden reemplazar anterior, funciones de no con sus más recientes, seguros homólogos.Para obtener más información, vea Sobrecargas de plantilla de seguridad.

Asignaciones de la rutina de texto genérico

rutina de TCHAR.H

_UNICODE y _MBCS no definido

_MBCS definido

_UNICODE definido

_vsntprintf_s

_vsnprintf_s

_vsnprintf_s

_vsnwprintf_s

_vsntprintf_s_l

_vsnprintf_s_l

_vsnprintf_s_l

_vsnwprintf_s_l

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

Requisitos

rutina

Encabezado necesario

encabezados opcionales

vsnprintf_s

<stdio.h> y <stdarg.h>

<varargs.h> *

_vsnprintf_s, _vsnprintf_s_l

<stdio.h> y <stdarg.h>

<varargs.h> *

_vsnwprintf_s, _vsnwprintf_s_l

<stdio.h> o <wchar.h> , y <stdarg.h>

<varargs.h> *

* Necesario para la compatibilidad de UNIX V.

Para obtener información adicional de compatibilidad, vea compatibilidad en la Introducción.

Ejemplo

// crt_vsnprintf_s.cpp
#include <stdio.h>
#include <wtypes.h>

void FormatOutput(LPCSTR formatstring, ...) 
{
   int nSize = 0;
   char buff[10];
   memset(buff, 0, sizeof(buff));
   va_list args;
   va_start(args, formatstring);
   nSize = vsnprintf_s( buff, sizeof(buff), _TRUNCATE, formatstring, args);
   printf("nSize: %d, buff: %s\n", nSize, buff);
}

int main() {
   FormatOutput("%s %s", "Hi", "there");
   FormatOutput("%s %s", "Hi", "there!");
   FormatOutput("%s %s", "Hi", "there!!");
}
  
  

Vea también

Referencia

E/S de la secuencia

funciones de vprintf

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

va_arg, va_end, va_start