_TRUNCATE
Określa zachowanie obcinania ciągów.
Składnia
#include <stdlib.h>
Uwagi
_TRUNCATE
włącza zachowanie obcięcia po przekazaniu jako parametru count
do następujących 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 przechowywać cały ciąg, normalne zachowanie tych funkcji polega na traktowaniu go jako sytuacji błędu (zobacz Walidacja parametru). Jeśli jednak obcinanie ciągów jest włączone przez przekazanie _TRUNCATE
, te funkcje będą kopiować tylko tyle ciągów, jak to będzie pasować, pozostawiając bufor docelowy o wartości null zakończony i zostanie zwrócony pomyślnie.
Obcięcie ciągu zmienia zwracane wartości funkcji, których dotyczy problem. Następujące funkcje zwracają wartość 0, jeśli nie wystąpi obcięcie lub STRUNCATE
jeśli wystąpi obcięcie:
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 zwracają liczbę znaków skopiowanych, jeśli nie wystąpi obcięcie, lub -1, jeśli wystąpi obcięcie (zgodne z zachowaniem oryginalnych snprintf
funkcji):
_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 );
}
truncation occurred!
'1234'