Namespaces
Variants

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 :
  • src ou dest est un pointeur nul
  • destsz ou count est zéro ou supérieur à RSIZE_MAX / sizeof(wchar_t)
  • il n'y a pas de caractère large nul dans les premiers destsz caractères larges de dest
  • une troncature se produirait : count ou la longueur de src, selon la valeur la plus petite, dépasse l'espace disponible entre le terminateur nul de dest et destsz.
  • 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 dest
2) 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

#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)
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