Namespaces
Variants

wmemcpy, wmemcpy_s

From cppreference.net
< 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 genau count aufeinanderfolgende Breitzeichen aus dem von src gezeigten Breitzeichen-Array in das von dest gezeigte Breitzeichen-Array. Wenn sich die Objekte überlappen, ist das Verhalten undefiniert. Wenn count null ist, führt die Funktion keine Operation aus.
2) Gleich wie (1) , mit der Ausnahme, dass die folgenden Fehler zur Laufzeit erkannt werden und die aktuell installierte constraint handler -Funktion aufrufen:
  • src oder dest ist ein null pointer
  • destsz oder count ist größer als RSIZE_MAX / sizeof ( wchar_t )
  • count ist größer als destsz (Überlauf würde auftreten)
  • Überlappung würde zwischen den Quell- und Zielarrays auftreten
Wie bei allen bounds-checked-Funktionen ist wmemcpy_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf die Integer-Konstante 1 setzt, bevor <wchar.h> eingebunden wird.

Inhaltsverzeichnis

Parameter

dest - Zeiger auf das Breitzeichen-Array, in das kopiert werden soll
src - Zeiger auf das Breitzeichen-Array, aus dem kopiert werden soll
count - Anzahl der zu kopierenden Breitzeichen
destsz - Maximale Anzahl der zu schreibenden Breitzeichen (die Größe des Zielpuffers)

Rückgabewert

1) gibt eine Kopie von dest zurück
2) gibt bei Erfolg Null zurück, gibt bei Fehler einen Wert ungleich Null zurück. Füllt im Fehlerfall den gesamten dst bis ausschließlich dst + dstsz mit Null-Weitzeichen, L ' \0 ' (sofern dest nicht null ist oder destsz größer als RSIZE_MAX / sizeof ( wchar_t ) )

Hinweise

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

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

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

Referenzen

  • C11-Standard (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-Standard (ISO/IEC 9899:1999):
  • 7.24.4.2.3 Die wmemcpy-Funktion (S: 377)

Siehe auch

kopiert eine bestimmte Anzahl von Breitzeichen zwischen zwei, möglicherweise überlappenden, Arrays
(Funktion)
kopiert eine bestimmte Anzahl von Zeichen von einer Zeichenkette zur anderen
(Funktion)
C++-Dokumentation für wmemcpy