_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'
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla