_TRUNCATE
Spécifie le comportement de troncation de chaîne.
Syntaxe
#include <stdlib.h>
Notes
_TRUNCATE
active le comportement de troncation quand il est passé en tant que paramètre count
à ces fonctions :
strncpy_s
, , _strncpy_s_l
, _wcsncpy_s_l
wcsncpy_s
, , _mbsncpy_s
_mbsncpy_s_l
strncat_s
, , _strncat_s_l
, _wcsncat_s_l
wcsncat_s
, , _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
Si la mémoire tampon de destination est trop petite pour contenir toute la chaîne, le comportement normal de ces fonctions consiste à le traiter comme une situation d’erreur (voir validation du paramètre). Toutefois, si la troncation de chaîne est activée en passant _TRUNCATE
, ces fonctions copient uniquement le maximum possible de la chaîne, en arrêtant la mémoire tampon de destination sur une valeur Null et génèrent une valeur de retour correcte.
La troncation de chaîne modifie les valeurs de retour des fonctions affectées. Les fonctions suivantes retournent 0 si aucune troncature ne se produit, ou STRUNCATE
si une troncation se produit :
strncpy_s
, , _strncpy_s_l
, _wcsncpy_s_l
wcsncpy_s
, , _mbsncpy_s
_mbsncpy_s_l
strncat_s
, , _strncat_s_l
, _wcsncat_s_l
wcsncat_s
, , _mbsncat_s
_mbsncat_s_l
Les fonctions suivantes retournent le nombre de caractères copiés si aucune troncation ne se produit, ou -1 si la troncation se produit (correspondant au comportement des fonctions d’origine snprintf
) :
_snprintf_s
, , _snprintf_s_l
_snwprintf_s
, ,_snwprintf_s_l
vsnprintf_s
, , _vsnprintf_s
_vsnprintf_s_l
, , _vsnwprintf_s
_vsnwprintf_s_l
Exemple
// 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'