wmemcpy, wmemcpy_s
From cppreference.net
|
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:
-
-
srcoderdestist ein null pointer -
destszodercountist größer als RSIZE_MAX / sizeof ( wchar_t ) -
countist größer alsdestsz(Überlauf würde auftreten) - Überlappung würde zwischen den Quell- und Zielarrays auftreten
-
-
Wie bei allen bounds-checked-Funktionen ist
wmemcpy_snur 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
Diesen Code ausführen
#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
|
(C95)
(C11)
|
kopiert eine bestimmte Anzahl von Breitzeichen zwischen zwei, möglicherweise überlappenden, Arrays
(Funktion) |
|
(C11)
|
kopiert eine bestimmte Anzahl von Zeichen von einer Zeichenkette zur anderen
(Funktion) |
|
C++-Dokumentation
für
wmemcpy
|
|