Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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'