strncat
, _strncat_l
, wcsncat
, _wcsncat_l
, _mbsncat
, _mbsncat_l
Ajoute les caractères d’une chaîne. Des versions plus sécurisées de ces fonctions sont disponibles. Consultez strncat_s
, _strncat_s_l
, wcsncat_s
, _wcsncat_s_l
, _mbsncat_s
, _mbsncat_s_l
.
Important
_mbsncat
et _mbsncat_l
ne peuvent pas être utilisées dans les applications qui s'exécutent dans Windows Runtime. Pour plus d’informations, consultez Fonctions CRT non prises en charge dans les applications de la plateforme Windows universelle.
char *strncat(
char *strDest,
const char *strSource,
size_t count
);
wchar_t *wcsncat(
wchar_t *strDest,
const wchar_t *strSource,
size_t count
);
unsigned char *_mbsncat(
unsigned char *strDest,
const unsigned char *strSource,
size_t count
);
unsigned char *_mbsncat_l(
unsigned char *strDest,
const unsigned char *strSource,
size_t count,
_locale_t locale
);
template <size_t size>
char *strncat(
char (&strDest)[size],
const char *strSource,
size_t count
); // C++ only
template <size_t size>
wchar_t *wcsncat(
wchar_t (&strDest)[size],
const wchar_t *strSource,
size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat(
unsigned char (&strDest)[size],
const unsigned char *strSource,
size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat_l(
unsigned char (&strDest)[size],
const unsigned char *strSource,
size_t count,
_locale_t locale
); // C++ only
strDest
Chaîne de destination se terminant par un caractère Null.
strSource
Chaîne source se terminant par Null.
count
Nombre de caractères à ajouter.
locale
Paramètres régionaux à utiliser.
Retourne un pointeur désignant la chaîne de destination. Aucune valeur de retour n'est réservée pour indiquer une erreur.
La fonction strncat
ajoute, au maximum, les count
premiers caractères de strSource
à strDest
. Le caractère initial de strSource
remplace le caractère Null de fin de strDest
. Si un caractère Null apparaît dans strSource
avant l’ajout de count
caractères, strncat
ajoute tous les caractères de strSource
, jusqu’au caractère Null. Si la valeur count
est supérieure à la longueur de strSource
, la longueur de strSource
est utilisée à la place de count
. Dans tous les cas, la chaîne obtenue se termine par un caractère null. Si la copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.
Important
strncat
ne vérifie pas si strDest
contient suffisamment d’espace ; il s’agit par conséquent d’une cause potentielle de dépassements de mémoire tampon. Gardez à l’esprit que count
limite le nombre de caractères ajoutés ; il ne s’agit pas d’une limite de la taille de strDest
. Reportez-vous à l’exemple ci-dessous. Pour plus d’informations, consultez Solutions contre les dépassements de mémoire tampon.
wcsncat
et _mbsncat
sont des versions à caractères larges et à caractères multioctets de strncat
. Les arguments de chaîne et la valeur de retour de wcsncat
sont des chaînes de caractères larges. Les arguments de chaîne et la valeur de retour de _mbsncat
sont des chaînes de caractères multioctets. Ces trois fonctions se comportent sinon de façon identique.
La valeur de la sortie est affectée par la valeur du paramètre de la catégorie LC_CTYPE
des paramètres régionaux. Pour plus d’informations, consultez setlocale
. Les versions de ces fonctions sans le suffixe _l
utilisent les paramètres régionaux actuels pour ce comportement dépendant des paramètres régionaux. Les versions avec le suffixe _l
sont identiques, sauf qu'elles utilisent à la place le paramètres régional passé en entrée. Pour plus d’informations, consultez Locale.
En C++, ces fonctions ont des surcharges de modèle. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Routine TCHAR.H |
_UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tcsncat |
strncat |
_mbsnbcat |
wcsncat |
_tcsncat_l |
_strncat_l |
_mbsnbcat_l |
_wcsncat_l |
Notes
Les routines _strncat_l
et _wcsncat_l
ne dépendent pas des paramètres régionaux et ne sont pas destinées à être appelées directement. Elles sont fournies pour une utilisation en interne par _tcsncat_l
.
Routine | En-tête requis |
---|---|
strncat |
<string.h> |
wcsncat |
<string.h> ou <wchar.h> |
_mbsncat |
<mbstring.h> |
_mbsncat_l |
<mbstring.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
// crt_strncat.c
// Use strcat and strncat to append to a string.
#include <stdlib.h>
#define MAXSTRINGLEN 39
char string[MAXSTRINGLEN+1];
// or char *string = malloc(MAXSTRINGLEN+1);
void BadAppend( char suffix[], int n )
{
strncat( string, suffix, n );
}
void GoodAppend( char suffix[], size_t n )
{
strncat( string, suffix, __min( n, MAXSTRINGLEN-strlen(string)) );
}
int main( void )
{
string[0] = '\0';
printf( "string can hold up to %d characters\n", MAXSTRINGLEN );
strcpy( string, "This is the initial string!" );
// concatenate up to 20 characters...
BadAppend( "Extra text to add to the string...", 20 );
printf( "After BadAppend : %s (%d chars)\n", string, strlen(string) );
strcpy( string, "This is the initial string!" );
// concatenate up to 20 characters...
GoodAppend( "Extra text to add to the string...", 20 );
printf( "After GoodAppend: %s (%d chars)\n", string, strlen(string) );
}
string can hold up to 39 characters
After BadAppend : This is the initial string!Extra text to add to (47 chars)
After GoodAppend: This is the initial string!Extra text t (39 chars)
Vous pouvez constater que BadAppend
a provoqué un dépassement de mémoire tampon.
Manipulation de chaînes
_mbsnbcat
, _mbsnbcat_l
strcat
, wcscat
, _mbscat
strcmp
, wcscmp
, _mbscmp
strcpy
, wcscpy
, _mbscpy
strncmp
, wcsncmp
, _mbsncmp
, _mbsncmp_l
strncpy
, _strncpy_l
, wcsncpy
, _wcsncpy_l
, _mbsncpy
, _mbsncpy_l
_strnicmp
, _wcsnicmp
, _mbsnicmp
, _strnicmp_l
, _wcsnicmp_l
, _mbsnicmp_l
strrchr
, wcsrchr
, _mbsrchr
, _mbsrchr_l
_strset
, _strset_l
, _wcsset
, _wcsset_l
, _mbsset
, _mbsset_l
strspn
, wcsspn
, _mbsspn
, _mbsspn_l
Paramètres régionaux
Interprétation des séquences de caractères multioctets