Namensräume
Varianten
Aktionen

wmemcpy, wmemcpy_s

Von cppreference.com
< c‎ | string‎ | wide
 
 
 
 
Definiert in Header <wchar.h>
(1)
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count );
(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 exakt count aufeinanderfolgende Wide-Zeichen vom Wide-Zeichen-Array, auf das von src gezeigt wird, in das Wide-Zeichen-Array, auf das von dest gezeigt wird. Wenn sich die Objekte überlappen, ist das Verhalten undefiniert. Wenn count null ist, tut die Funktion nichts.
2) Dasselbe wie (1), außer dass die folgenden Fehler zur Laufzeit erkannt werden und die aktuell installierte Constraint-Handler-Funktion aufrufen:
  • 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 Zielarrays würde auftreten
Wie bei allen grenzgeprüften Funktionen ist wmemcpy_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von <wchar.h> auf die ganzzahlige Konstante 1 setzt.

Inhalt

[edit] Parameter

dest - Zeiger auf das Wide-Zeichen-Array, in das kopiert werden soll
src - Zeiger auf das Wide-Zeichen-Array, aus dem kopiert werden soll
zählt - Anzahl der zu kopierenden Wide-Zeichen
destsz - maximale Anzahl von zu schreibenden Wide-Zeichen (die Größe des Zielpuffers)

[edit] Rückgabewert

1) Gibt eine Kopie von dest zurück
2) gibt null bei Erfolg zurück, gibt ungleich null bei Fehler zurück. Bei einem Fehler wird außerdem der gesamte dst bis einschließlich und nicht einschließlich dst+dstsz mit Null-Wide-Zeichen gefüllt, L'\0' (es sei denn, dest ist null oder destsz ist größer als RSIZE_MAX/sizeof(wchar_t))

[edit] Hinweise

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

Diese Funktion ist nicht sprachabhängig und achtet nicht auf die Werte der wchar_t-Objekte, die sie kopiert: Sowohl Nulls als auch ungültige Zeichen werden ebenfalls kopiert.

[edit] Beispiel

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

Mögliche Ausgabe

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

[edit] Referenzen

  • C11-Standard (ISO/IEC 9899:2011)
  • 7.29.4.2.3 Die Funktion wmemcpy (S. 431)
  • K.3.9.2.1.3 Die Funktion wmemcpy_s (S. 641)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.24.4.2.3 Die Funktion wmemcpy (S. 377)

[edit] Siehe auch

kopiert eine bestimmte Anzahl breiter Zeichen zwischen zwei, möglicherweise überlappenden, Arrays
(Funktion) [bearbeiten]
kopiert eine bestimmte Anzahl von Zeichen von einem String in einen anderen
(Funktion) [bearbeiten]
C++-Dokumentation für wmemcpy