strcat, strcat_s
|
Défini dans l'en-tête
<string.h>
|
||
| (1) | ||
|
char
*
strcat
(
char
*
dest,
const
char
*
src
)
;
|
(jusqu'à C99) | |
|
char
*
strcat
(
char
*
restrict
dest,
const
char
*
restrict
src
)
;
|
(depuis C99) | |
|
errno_t strcat_s
(
char
*
restrict
dest, rsize_t destsz,
const
char
*
restrict
src
)
;
|
(2) | (depuis C11) |
src
à la fin de la chaîne d'octets terminée par un caractère nul pointée par
dest
. Le caractère
src[0]
remplace le terminateur nul à la fin de
dest
. La chaîne d'octets résultante est terminée par un caractère nul.
src
et
dest
ainsi que le caractère nul de fin. Le comportement est indéfini si les chaînes se chevauchent. Le comportement est indéfini si
dest
ou
src
n'est pas un pointeur vers une chaîne d'octets terminée par un caractère nul.
destsz
) avec des valeurs non spécifiées et que les erreurs suivantes sont détectées à l'exécution et appellent la fonction
constraint handler
actuellement installée :
-
-
srcoudestest un pointeur nul -
destszest zéro ou supérieur à RSIZE_MAX -
il n'y a pas de terminateur nul dans les premiers
destszoctets dedest -
une troncation se produirait (l'espace disponible à la fin de
destne pourrait pas contenir tous les caractères, y compris le terminateur nul, desrc) - un chevauchement se produirait entre les chaînes source et destination
-
dest
<
strlen
(
dest
)
+
strlen
(
src
)
+
1
<=
destsz
; en d'autres termes, une valeur erronée de
destsz
n'expose pas le dépassement de tampon imminent.
-
Comme pour toutes les fonctions à vérification de limites,
strcat_sn'est garantie d'être disponible que si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ à la constante entière 1 avant d'inclure <string.h> .
Table des matières |
Paramètres
| dest | - | pointeur vers la chaîne d'octets terminée par un caractère nul à laquelle ajouter |
| src | - | pointeur vers la chaîne d'octets terminée par un caractère nul à copier |
| destsz | - | nombre maximum de caractères à écrire, généralement la taille du tampon de destination |
Valeur de retour
dest
dest
est un pointeur nul ou
destsz
est zéro ou supérieur à
RSIZE_MAX
).
Notes
Parce que
strcat
doit chercher la fin de
dest
à chaque appel, il est inefficace de concaténer plusieurs chaînes en une seule en utilisant
strcat
.
strcat_s
est autorisé à écraser le tableau de destination à partir du dernier caractère écrit jusqu'à
destsz
afin d'améliorer l'efficacité : il peut copier en blocs multioctets puis vérifier les octets nuls.
La fonction
strcat_s
est similaire à la
fonction BSD
strlcat
, sauf que
-
strlcattronque la chaîne source pour qu'elle tienne dans la destination -
strlcatn'effectue pas toutes les vérifications à l'exécution questrcat_sréalise -
strlcatne rend pas les échecs évidents en définissant la destination sur une chaîne nulle ou en appelant un gestionnaire si l'appel échoue.
Bien que
strcat_s
interdise la troncation en raison de risques de sécurité potentiels, il est possible de tronquer une chaîne en utilisant la version à vérification des limites
strncat_s
à la place.
Exemple
#define __STDC_WANT_LIB_EXT1__ 1 #include <string.h> #include <stdio.h> #include <stdlib.h> int main(void) { char str[50] = "Hello "; char str2[50] = "World!"; strcat(str, str2); strcat(str, " ..."); strcat(str, " Goodbye World!"); puts(str); #ifdef __STDC_LIB_EXT1__ set_constraint_handler_s(ignore_handler_s); int r = strcat_s(str, sizeof str, " ... "); printf("str = \"%s\", r = %d\n", str, r); r = strcat_s(str, sizeof str, " and this is too much"); printf("str = \"%s\", r = %d\n", str, r); #endif }
Sortie possible :
Hello World! ... Goodbye World! str = "Hello World! ... Goodbye World! ... ", r = 0 str = "", r = 22
Références
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.24.3.1 La fonction strcat (p: 364)
-
- K.3.7.2.1 La fonction strcat_s (p: 617-618)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.21.3.1 La fonction strcat (p: 327)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 4.11.3.1 La fonction strcat
Voir aussi
|
(C11)
|
concatène un certain nombre de caractères de deux chaînes
(fonction) |
|
(C11)
|
copie une chaîne dans une autre
(fonction) |
|
(C23)
|
copie un tampon dans un autre, en s'arrêtant après le délimiteur spécifié
(fonction) |
|
Documentation C++
pour
strcat
|
|