vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Escribe un resultado con formato mediante un puntero a una lista de argumentos. Estas son versiones de vsnprintf, _vsnprintf, _vsnprintf_l, _vsnwprintf, _vsnwprintf_l con mejoras de seguridad, como se describe en características de seguridad de 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 del resultado.

sizeOfBuffer
Tamaño de buffer para el resultado, en número de caracteres.

count
Número máximo de caracteres que se va a escribir (sin incluir el carácter null) o _TRUNCATE.

format
Especificación de formato.

argptr
Puntero a la lista de argumentos.

locale
Configuración regional que se va a usar.

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

vsnprintf_s,_vsnprintf_s y _vsnwprintf_s devuelven el número de caracteres escritos, sin incluir el carácter null o un valor negativo si se produce un error de salida. vsnprintf_s es idéntica a _vsnprintf_s. vsnprintf_s se incluye por razones de compatibilidad con el estándar ANSI. La clase _vnsprintf se conserva por razones de compatibilidad con versiones anteriores.

Si supera el almacenamiento necesario para almacenar los datos y un valor null de terminación sizeOfBuffer, se invoca el controlador de parámetros no válidos, como se describe en validación de parámetros, a menos que count es _TRUNCATE, en cuyo caso como parte de la cadena que quepa buffer se escribe y devuelve -1. Si la ejecución continúa después del controlador de parámetros no válidos, estas funciones establecen buffer en una cadena vacía, establecen errno en ERANGE y devuelven -1.

Si buffer o format es un puntero NULL, o si count es menor o igual que cero, se invoca el controlador de parámetros no válidos. Si la ejecución puede continuar, estas funciones establecen errno en EINVAL y devuelven -1.

Condiciones de error

ConditionVolvererrno
buffer es NULL-1EINVAL
format es NULL-1EINVAL
count <= 0-1EINVAL
sizeOfBuffer es demasiado pequeño (y count != _TRUNCATE)-1 (y buffer se establece en una cadena vacía)ERANGE

Cada una de estas funciones toma un puntero a una lista de argumentos, después da formato a un máximo de count caracteres, y los escribe, de los datos especificados en la memoria a la que señala buffer y anexa un carácter nulo final.

Si count es _TRUNCATE, estas funciones se escriben como parte de la cadena que quepa en buffer y dejan espacio para un carácter nulo. Si toda la cadena (con el valor nulo final) cabe en buffer, estas funciones devuelven el número de caracteres escrito (sin incluir el valor nulo final); de lo contrario, devuelven -1 para indicar que se ha producido truncamiento.

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

System_CAPS_ICON_important.jpg Importante

Asegúrese de que format no es una cadena definida por el usuario. Para obtener más información, vea Avoiding Buffer Overruns(Evitar saturaciones del búfer).

System_CAPS_ICON_note.jpg Nota

Para asegurarse de que hay espacio para el valor nulo final, asegúrese de que count es claramente menor que la longitud del búfer, o use _TRUNCATE.

En C++, el uso de estas funciones se simplifica con las sobrecargas de plantilla; las sobrecargas pueden realizar una inferencia automáticamente de la longitud de búfer (lo que elimina el requisito de especificar un argumento de tamaño) y pueden reemplazar automáticamente funciones anteriores no seguras con sus homólogos seguros más recientes. Para obtener más información, consulta Secure Template Overloads.

Asignaciones de rutina de texto genérico

Rutina TCHAR.H_UNICODE y _MBCS no definidos_MBCS definido_UNICODE definido
_vsntprintf_s_vsnprintf_s_vsnprintf_s_vsnwprintf_s
_vsntprintf_s_l_vsnprintf_s_l_vsnprintf_s_l_vsnwprintf_s_l

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

RutinaEncabezado necesarioEncabezados 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>*

*Se requiere para la compatibilidad con UNIX v..

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

// 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, _countof(buff), _TRUNCATE, formatstring, args);  
   printf("nSize: %d, buff: %s\n", nSize, buff);  
   va_end(args);
}  
  
int main() {  
   FormatOutput("%s %s", "Hi", "there");  
   FormatOutput("%s %s", "Hi", "there!");  
   FormatOutput("%s %s", "Hi", "there!!");  
}  

nSize: 8, buff: Hi there  
nSize: 9, buff: Hi there!  
nSize: -1, buff: Hi there!  

E/S de secuencia
vprintf (funciones)
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

Mostrar: