_TRUNCATE
Gibt das Abschneideverhalten von Zeichenfolgen an.
Syntax
#include <stdlib.h>
Hinweise
_TRUNCATE
aktiviert das Abschneideverhalten, wenn es als count
-Parameter an folgende Funktionen übergeben wird:
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
Wenn der Zielpuffer zu klein ist, um die gesamte Zeichenfolge zu halten, besteht das normale Verhalten dieser Funktionen darin, ihn als Fehlersituation zu behandeln (siehe Parameterüberprüfung). Wenn jedoch das Abschneiden der Zeichenfolge durch das Übergeben von _TRUNCATE
aktiviert wird, kopieren diese Funktionen nur so viel von der Zeichenfolge wie passt, sodass der Zielpuffer auf NULL endet, und kehren erfolgreich zurück.
Das Abschneiden der Zeichenfolge ändert die Rückgabewerte der betroffenen Funktionen. Die folgenden Funktionen geben 0 zurück, wenn kein Abschneiden erfolgt, und STRUNCATE
, wenn abgeschnitten wird:
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
Die folgenden Funktionen geben die Anzahl der kopierten Zeichen zurück, wenn keine Abkürzung auftritt, oder -1, wenn abgeschnitten wird (entsprechend dem Verhalten der ursprünglichen snprintf
Funktionen):
_snprintf_s
, , _snprintf_s_l
_snwprintf_s
_snwprintf_s_l
vsnprintf_s
, , _vsnprintf_s
_vsnprintf_s_l
, , _vsnwprintf_s
_vsnwprintf_s_l
Beispiel
// 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'