wcsncat, wcsncat_s
De fr.cppreference.net
| Défini dans l'en-tête <wchar.h>
|
||
wchar_t* wcsncat( wchar_t* dest, const wchar_t* src, size_t count );
|
(1) | (depuis C95) (jusqu'à C99) |
wchar_t* wcsncat( wchar_t* restrict dest,
const wchar_t* restrict src, size_t count );
|
(depuis C99) | |
errno_t wcsncat_s( wchar_t* restrict dest, rsize_t destsz,
const wchar_t* restrict src, rsize_t count );
|
(2) | (depuis C11) |
1) Ajoute au plus
count caractères larges de la chaîne large pointée par src, en s'arrêtant si le terminateur nul est copié, à la fin de la chaîne de caractères pointée par dest. Le caractère large src[0] remplace le terminateur nul à la fin de dest. Le terminateur nul est toujours ajouté à la fin (donc le nombre maximum de caractères larges que la fonction peut écrire est count + 1). Le comportement est indéfini si le tableau de destination n'est pas assez grand pour contenir à la fois le contenu de
src et dest et le caractère large nul de terminaison. Le comportement est indéfini si les chaînes se chevauchent.
2) Identique à (1), sauf que cette fonction peut écraser le reste du tableau de destination (à partir du dernier caractère large écrit jusqu'à
destsz) et que les erreurs suivantes sont détectées à l'exécution et appellent la fonction gestionnaire de contrainte actuellement installée :
srcoudestest un pointeur nuldestszoucountest zéro ou supérieur àRSIZE_MAX / sizeof(wchar_t)- il n'y a pas de caractère large nul dans les premiers
destszcaractères larges dedest - une troncature se produirait :
countou la longueur desrc, selon la valeur la plus petite, dépasse l'espace disponible entre le terminateur nul dedestetdestsz. - un chevauchement se produirait entre la chaîne source et la chaîne de destination
Comme pour toutes les fonctions avec vérification des limites,
wcsncat_s n'est garantie disponible que si __STDC_LIB_EXT1__ est définie par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ comme la constante entière 1 avant d'inclure <wchar.h>.Paramètres
| dest | - | pointeur vers la chaîne large terminée par un nul à laquelle ajouter |
| src | - | pointeur vers la chaîne large terminée par un nul à copier |
| count | - | nombre maximum de caractères larges à copier |
| destsz | - | la taille du tampon de destination |
Valeur de retour
1) retourne une copie de
dest2) retourne zéro en cas de succès, retourne non nul en cas d'erreur. En cas d'erreur, écrit
L'\0' dans dest[0] (sauf si dest est un pointeur nul ou destsz est zéro ou supérieur à RSIZE_MAX / sizeof(wchar_t)).Notes
Bien que la troncature pour s'adapter au tampon de destination soit un risque de sécurité et donc une violation de contrainte d'exécution pour wcsncat_s, il est possible d'obtenir le comportement de troncature en spécifiant count égal à la taille du tableau de destination moins un : cela copiera les premiers count caractères larges et ajoutera le terminateur nul comme toujours :
size_t count = sizeof dst / sizeof *dst;
wcsncat_s(dst, count, src, count - wcsnlen_s(dst, count) - 1);
Exemple
Exécuter ce code
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main(void)
{
wchar_t str[50] = L"Земля, прощай.";
wcsncat(str, L" ", 1);
wcsncat(str, L"В добрый путь.", 8); // only append the first 8 wide chars
setlocale(LC_ALL, "en_US.utf8");
printf("%ls", str);
}
Sortie possible :
Земля, прощай. В добрый
Références
- Norme C23 (ISO/IEC 9899:2024) :
- 7.31.4.3.2 La fonction wcsncat (p. 439)
- K.3.9.3.2.2 La fonction wcsncat_s (p. 666)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.29.4.3.2 La fonction wcsncat (p. 315)
- K.3.9.2.2.2 La fonction wcsncat_s (p. 466-467)
- Norme C11 (ISO/IEC 9899:2011) :
- 7.29.4.3.2 La fonction wcsncat (p. 432-433)
- K.3.9.2.2.2 La fonction wcsncat_s (p. 643-644)
- Norme C99 (ISO/IEC 9899:1999) :
- 7.24.4.3.2 La fonction wcsncat (p. 378-379)
Voir aussi
(C95)(C11) |
ajoute une copie d'une chaîne large à une autre (fonction) |
(C11) |
concatène un certain nombre de caractères de deux chaînes (fonction) |
(C95)(C11) |
copie une chaîne large vers une autre (fonction) |
Documentation C++ pour wcsncat
| |