_TRUNCATE
Especifica el comportamiento de truncamiento de cadenas.
Sintaxis
#include <stdlib.h>
Comentarios
_TRUNCATE
habilita el comportamiento de truncamiento cuando se pasa como el parámetro count
a estas funciones:
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, , _mbsncpy_s
, _mbsncpy_s_l
strncat_s
, _strncat_s_l
, wcsncat_s
, _wcsncat_s_l
, , _mbsncat_s
, _mbsncat_s_l
_snprintf_s
, _snprintf_s_l
, , _snwprintf_s
, _snwprintf_s_l
vsnprintf_s
, _vsnprintf_s
, _vsnprintf_s_l
, , _vsnwprintf_s
, _vsnwprintf_s_l
Si el búfer de destino es demasiado pequeño para contener toda la cadena, el comportamiento normal de estas funciones es tratarlo como una situación de error (consulte Validación de parámetros). En cambio, si el truncamiento de cadenas se habilita pasando _TRUNCATE
, estas funciones solo copiarán la parte de la cadena que quepa, dejando el búfer de destino finalizado en null y se devuelve correctamente.
El truncamiento de cadenas cambia los valores devueltos de las funciones afectadas. Las siguientes funciones devuelven 0 si no se produce ningún truncamiento o STRUNCATE
si se produce el truncamiento:
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, , _mbsncpy_s
, _mbsncpy_s_l
strncat_s
, _strncat_s_l
, wcsncat_s
, _wcsncat_s_l
, , _mbsncat_s
, _mbsncat_s_l
Las siguientes funciones devuelven el número de caracteres copiados si no se produce ningún truncamiento o -1 si se produce truncamiento (lo que coincide con el comportamiento de las funciones snprintf
originales):
_snprintf_s
, _snprintf_s_l
, , _snwprintf_s
, _snwprintf_s_l
vsnprintf_s
, _vsnprintf_s
, _vsnprintf_s_l
, , _vsnwprintf_s
, _vsnwprintf_s_l
Ejemplo
// crt_truncate.c
#include <stdlib.h>
#include <errno.h>
int main()
{
char src[] = "1234567890";
char dst[5];
errno_t err = strncpy_s(dst, _countof(dst), src, _TRUNCATE);
if ( err == STRUNCATE )
printf( "truncation occurred!\n" );
printf( "'%s'\n", dst );
}
truncation occurred!
'1234'