Namespaces
Variants

wmemcpy, wmemcpy_s

From cppreference.net
< c ‎ | string ‎ | wide
Défini dans l'en-tête <wchar.h>
(1)
wchar_t * wmemcpy ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(depuis C95)
(jusqu'à C99)
wchar_t * wmemcpy ( wchar_t * restrict dest, const wchar_t * restrict src,
size_t count ) ;
(depuis C99)
errno_t wmemcpy_s ( wchar_t * restrict dest, rsize_t destsz,
const wchar_t * restrict src, rsize_t count ) ;
(2) (depuis C11)
1) Copie exactement count caractères larges successifs du tableau de caractères larges pointé par src vers le tableau de caractères larges pointé par dest . Si les objets se chevauchent, le comportement est indéfini. Si count est zéro, la fonction ne fait rien.
2) Identique à (1) , sauf que les erreurs suivantes sont détectées à l'exécution et appellent la fonction gestionnaire de contraintes actuellement installée :
  • src ou dest est un pointeur nul
  • destsz ou count est supérieur à RSIZE_MAX / sizeof ( wchar_t )
  • count est supérieur à destsz (un dépassement se produirait)
  • un chevauchement se produirait entre les tableaux source et destination
Comme pour toutes les fonctions à vérification de limites, wmemcpy_s n'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 <wchar.h> .

Table des matières

Paramètres

dest - pointeur vers le tableau de caractères larges à copier
src - pointeur vers le tableau de caractères larges à copier
count - nombre de caractères larges à copier
destsz - nombre maximal de caractères larges à écrire (taille du tampon de destination)

Valeur de retour

1) renvoie une copie de dest
2) renvoie zéro en cas de succès, renvoie une valeur non nulle en cas d'erreur. De plus, en cas d'erreur, remplit entièrement dst jusqu'à mais non compris dst + dstsz avec des caractères larges nuls, L ' \0 ' (sauf si dest est nul ou destsz est supérieur à RSIZE_MAX / sizeof ( wchar_t ) )

Notes

L'analogue de cette fonction pour les chaînes d'octets est strncpy , et non strcpy .

Cette fonction n'est pas sensible aux paramètres régionaux et ne prête aucune attention aux valeurs des wchar_t qu'elle copie : les caractères nuls ainsi que les caractères non valides sont également copiés.

Exemple

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
    wchar_t from1[] = L"नमस्ते";
    size_t sz1 = sizeof from1 / sizeof *from1;
    wchar_t from2[] = L"Բարև";
    size_t sz2 = sizeof from2 / sizeof *from2;
    wchar_t to[sz1 + sz2];
    wmemcpy(to, from1, sz1); // copy from1, along with its null terminator
    wmemcpy(to + sz1, from2, sz2); // append from2, along with its null terminator
    setlocale(LC_ALL, "en_US.utf8");
    printf("Wide array contains: ");
    for(size_t n = 0; n < sizeof to / sizeof *to; ++n)
        if(to[n])
            printf("%lc", to[n]);
        else
            printf("\\0");
    printf("\n");
}

Sortie possible :

Wide array contains: नमस्ते\0Բարև\0

Références

  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.29.4.2.3 La fonction wmemcpy (p: 431)
  • K.3.9.2.1.3 La fonction wmemcpy_s (p: 641)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.24.4.2.3 La fonction wmemcpy (p: 377)

Voir aussi

copie un certain nombre de caractères larges entre deux tableaux, potentiellement chevauchants
(fonction)
copie un certain nombre de caractères d'une chaîne à une autre
(fonction)
Documentation C++ pour wmemcpy