wmemcpy, wmemcpy_s
Depuis fr.cppreference.net
| Défini dans l'en-tête <wchar.h>
|
||
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count );
|
(1) | (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 depuis le 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 vaut 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 contrainte actuellement installée :
srcoudestest un pointeur nuldestszoucountest supérieur àRSIZE_MAX / sizeof(wchar_t)countest supérieur àdestsz(un débordement se produirait)- un chevauchement se produirait entre les tableaux source et destination
- Comme pour toutes les fonctions vérifiées aux limites,
wmemcpy_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__comme la constante entière1avant d'inclure <wchar.h>.
Paramètres
| dest | - | pointeur vers le tableau de caractères larges dans lequel copier |
| src | - | pointeur vers le tableau de caractères larges depuis lequel 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) retourne une copie de
dest2) retourne zéro en cas de succès, retourne non nul en cas d'erreur. De plus, en cas d'erreur, remplit tout
dest jusqu'à (mais sans inclure) dest + destsz 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, pas strcpy.
Cette fonction n'est pas sensible à la locale et ne prête aucune attention aux valeurs des objets wchar_t qu'elle copie : les caractères nuls ainsi que les caractères invalides sont également copiés.
Exemple
Exécuter ce code
#include <locale.h>
#include <stdio.h>
#include <wchar.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 C23 (ISO/IEC 9899:2024) :
- 7.29.4.2.3 La fonction wmemcpy (p: TBD)
- K.3.9.2.1.3 La fonction wmemcpy_s (p: TBD)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.29.4.2.3 La fonction wmemcpy (p: TBD)
- K.3.9.2.1.3 La fonction wmemcpy_s (p: TBD)
- 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
(C95)(C11) |
copie un certain nombre de caractères larges entre deux tableaux, éventuellement superposés (fonction) |
(C11) |
copie un certain nombre de caractères d'une chaîne à une autre (fonction) |
Documentation C++ pour wmemcpy
| |