_TRUNCATE
Especifica o comportamento de truncamento de cadeia de caracteres.
#include <stdlib.h>
Comentários
_TRUNCATE habilita comportamento de truncamento quando passado como o parâmetro de count a essas funções:
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
Se o buffer de destino for muito pequeno para manter a cadeia de caracteres inteira, o comportamento normal dessas funções é a tratará como um caso de erro (consulte Validação do parâmetro). No entanto, se o truncamento de cadeia de caracteres é habilitado passando _TRUNCATE, essas funções só copiarão o máximo possível da cadeia de caracteres como se ajustará, deixando o buffer de destino com terminação nula, e retornarão com êxito.
As alterações de truncamento os valores de retorno de funções afetadas. As seguintes funções retornam 0 se nenhum truncamento ocorre, ou STRUNCATE se o truncamento:
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
As seguintes funções retornam o número de caracteres copiados se nenhum truncamento ocorre, ou -1 se ocorrer o truncamento ocorre (correspondendo o comportamento das funções originais do snprintf):
_snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l
vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l
Exemplo
// 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 );
}