wmemcpy, wmemcpy_s
Von cppreference.com
| 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:
-
srcoderdestist ein Nullzeiger -
destszodercountist größer als RSIZE_MAX/sizeof(wchar_t) -
countist größer alsdestsz(Überlauf würde auftreten) - Überlappung zwischen Quell- und Zielarrays würde auftreten
-
- Wie bei allen grenzgeprüften Funktionen ist
wmemcpy_snur 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ück2) 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
Führen Sie diesen Code aus
#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
| (C95)(C11) |
kopiert eine bestimmte Anzahl breiter Zeichen zwischen zwei, möglicherweise überlappenden, Arrays (Funktion) |
| (C11) |
kopiert eine bestimmte Anzahl von Zeichen von einem String in einen anderen (Funktion) |
| C++-Dokumentation für wmemcpy
| |