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 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
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l