_TRUNCATE
Определяет поведение усечения строки.
#include <stdlib.h>
Заметки
_TRUNCATE разрешает усечение, если передается в качестве параметра count этим функциям:
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
Если буфер назначения слишком мал для хранения всей строки, нормальным поведением для этих функций является интерпретирование этой ситуации как ошибки (см. раздел Проверка параметров). Однако если разрешено усечение строки путем передачи _TRUNCATE, эти функции копируют столько символов, сколько возможно, завершая буфер нулевым символом, и успешно завершаются.
Усечение строки меняет возвращаемые значения соответствующих функций. Следующие функции возвращают 0, если не происходит усечение, или STRUNCATE, если происходит усечение.
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
Следующие функции возвращают количество копированных символов при отсутствии усечения или -1, если происходит усечение (соответствуя поведению исходных функций snprintf).
_snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l
vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l
Пример
// 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 );
}