sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
Datos con formato escribir en una cadena.Éstas son versiones de sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l con mejoras de seguridad como se describe en Características de seguridad en 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
Ubicación de almacenamiento para los resultadossizeOfBuffer
Número máximo de caracteres a almacenar.format
cadena de la Formato-CONTROLargument
argumentos opcionaleslocale
la configuración regional a utilizar.
Para obtener más información, vea Especificaciones de formato.
Valor devuelto
El número de caracteres con tipo, o – 1 si se ha producido un error.Si buffer o format es un puntero NULL, sprintf_s y devuelva -1 de swprintf_s y conjunto errno a EINVAL.
sprintf_s devuelve el número de bytes almacenados en buffer, sin contar el carácter null de terminación.swprintf_s devuelve el número de caracteres anchos almacenados en buffer, sin contar el carácter ancho final nulo.
Comentarios
La función de sprintf_s da formato y almacena una serie de caracteres y valores en buffer.Cada argument (si existe) se convierte y salida según la especificación correspondiente de formato en format.El formato consta de los caracteres ordinarios y tiene el mismo formato y función que el argumento de format para printf.Un carácter null se anexan después del último carácter con tipo.Si la copia aparece entre cadenas superpuestas, el comportamiento es indefinido.
Una gran diferencia entre sprintf_s y sprintf es que sprintf_s comprueba la cadena de formato de los caracteres de formato válidos, mientras que las comprobaciones de sprintf sólo si la cadena de formato o el búfer es punteros de NULL .Si se invoca cualquiera los errores activados, el controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si la ejecución puede continuar, la función devuelve -1 y establece errno a EINVAL.
Otra diferencia principal entre sprintf_s y sprintf es que sprintf_s toma un parámetro de longitud que especifica el tamaño del búfer de salida en caracteres.Si el búfer es demasiado pequeño para el texto a que se va a imprimir el búfer está establecida en una cadena vacía y se invoca el controlador no válido del parámetro.A diferencia de snprintf, sprintf_s garantiza que el búfer será terminada en null (a menos que el tamaño de búfer es cero).
swprintf_s es una versión con caracteres anchos de sprintf_s; los argumentos de puntero a swprintf_s son cadenas de caracteres.Detección de errores de codificación en swprintf_s puede diferir de que en sprintf_s.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.
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.
Hay versiones de sprintf_s que proporcionan un control adicional sobre lo que sucede si el búfer es demasiado pequeño.Para obtener más información, vea _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.
Asignaciones de la rutina de texto genérico
rutina de TCHAR.H |
_UNICODE y _MBCS no 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
rutina |
Encabezado necesario |
---|---|
sprintf_s, _sprintf_s_l |
<stdio.h> |
swprintf_s, _swprintf_s_l |
<stdio.h> o <wchar.h> |
Para obtener información adicional de compatibilidad, vea compatibilidad en la Introducción.
Ejemplo
// 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 );
}
// 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 );
}
Equivalente en .NET Framework
[M:System::String::Format]
Vea también
Referencia
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l