_TRUNCATE
Określa zachowanie obcinania ciąg.
#include <stdlib.h>
Uwagi
_TRUNCATEUmożliwia zachowanie obcinania, gdy dane są przekazywane jako count parametr do tych funkcji:
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
Jeśli bufor docelowy jest zbyt mały, aby pomieścić cały ciąg, normalne zachowanie tych funkcji jest traktowanie go jako wystąpienia błędu (zobacz Sprawdzanie poprawności parametru).Jednakże jeśli obcinania ciąg jest włączony, przekazując _TRUNCATE, funkcje te zostaną skopiowane tylko tyle ciąg znaków, ile się zmieści, pozostawiając bufor docelowy zakończonym znakiem null i pomyślnie powrócić.
Obcinanie ciągu zmienia wartości zwracane funkcji, których dotyczy luka.Następujące funkcje zwracają wartość 0, jeśli nie zostanie obcięte, lub STRUNCATE Jeśli obcinania występują:
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
Następujące funkcje zwraca liczbę znaków, jeśli nie zostanie obcięte kopiowany lub -1 Jeśli obcinania występują (dopasowanie zachowanie oryginalnej funkcji sprintf):
_snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l
vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l
Przykład
// 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 );
}