Namespaces
Variants

wmemcpy, wmemcpy_s

Von de.cppreference.net
 
 
 
 
Definiert in Header <wchar.h>
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count );
(1) (seit C95)
(bis C99)
wchar_t* wmemcpy(wchar_t* restrict dest, const wchar_t* restrict src,
                 size_t count );
(seit C99)
errno_t wmemcpy_s( wchar_t* restrict dest, rsize_t destsz,
                   const wchar_t* restrict src, rsize_t count );
(2) (seit C11)
1) Kopiert genau count aufeinanderfolgende breite Zeichen aus dem breiten Zeichenarray, auf das src zeigt, in das breite Zeichenarray, auf das dest zeigt. Falls die Objekte überlappen, ist das Verhalten undefiniert. Falls count null ist, tut die Funktion nichts.
2) Wie (1), außer dass die folgenden Fehler zur Laufzeit erkannt werden und die aktuell installierte Constraint-Handler-Funktion aufgerufen wird:
  • src oder dest ist ein Nullzeiger
  • destsz oder count ist größer als RSIZE_MAX / sizeof(wchar_t)
  • count ist größer als destsz (Überlauf würde auftreten)
  • Überlappung zwischen Quell- und Ziel-Arrays würde auftreten
Wie bei allen bereichsgeprüften Funktionen ist wmemcpy_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ als die ganzzahlige Konstante 1 definiert, bevor <wchar.h> eingebunden wird.

Parameter

dest - Zeiger auf das breite Zeichenarray, in das kopiert werden soll
src - Zeiger auf das breite Zeichenarray, aus dem kopiert werden soll
count - Anzahl der zu kopierenden breiten Zeichen
destsz - maximale Anzahl der zu schreibenden breiten Zeichen (die Größe des Zielpuffers)

Rückgabewert

1) gibt eine Kopie von dest
zurück2) gibt bei Erfolg Null zurück, bei Fehler einen Wert ungleich Null. Bei Fehler wird außerdem der gesamte dest bis zu, aber nicht einschließlich dest + destsz mit Null-Breitzeichen gefüllt, L'\0' (es sei denn, dest ist null oder destsz ist größer als RSIZE_MAX / sizeof(wchar_t))

Hinweise

Das Analogon dieser Funktion für Byte-Zeichenketten ist strncpy, nicht strcpy.

Diese Funktion ist nicht sprachumgebungsabhängig und beachtet die Werte der wchar_t-Objekte, die sie kopiert, nicht: Nullzeichen sowie ungültige Zeichen werden ebenfalls kopiert.

Beispiel

#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");
}

Mögliche Ausgabe:

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

Referenzen

  • C23-Norm (ISO/IEC 9899:2024):
  • 7.29.4.2.3 Die wmemcpy-Funktion (S: TBD)
  • K.3.9.2.1.3 Die wmemcpy_s-Funktion (S: TBD)
  • C17-Norm (ISO/IEC 9899:2018):
  • 7.29.4.2.3 Die wmemcpy-Funktion (S: TBD)
  • K.3.9.2.1.3 Die wmemcpy_s-Funktion (S: TBD)
  • C11-Norm (ISO/IEC 9899:2011):
  • 7.29.4.2.3 Die wmemcpy-Funktion (S: 431)
  • K.3.9.2.1.3 Die wmemcpy_s-Funktion (S: 641)
  • C99-Norm (ISO/IEC 9899:1999):
  • 7.24.4.2.3 Die wmemcpy-Funktion (S: 377)

Siehe auch

kopiert eine bestimmte Anzahl breiter Zeichen zwischen zwei möglicherweise überlappenden Arrays
(Funktion)
kopiert eine bestimmte Anzahl von Zeichen von einer Zeichenkette in eine andere
(Funktion)
C++-Dokumentation für wmemcpy