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:
srcoderdestist ein Nullzeigerdestszodercountist größer alsRSIZE_MAX / sizeof(wchar_t)countist größer alsdestsz(Überlauf würde auftreten)- Überlappung zwischen Quell- und Ziel-Arrays würde auftreten
- Wie bei allen bereichsgeprüften Funktionen ist
wmemcpy_snur garantiert verfügbar, wenn__STDC_LIB_EXT1__von der Implementierung definiert ist und der Benutzer__STDC_WANT_LIB_EXT1__als die ganzzahlige Konstante1definiert, 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
Diesen Code ausführen
#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
(C95)(C11) |
kopiert eine bestimmte Anzahl breiter Zeichen zwischen zwei möglicherweise überlappenden Arrays (Funktion) |
(C11) |
kopiert eine bestimmte Anzahl von Zeichen von einer Zeichenkette in eine andere (Funktion) |
C++-Dokumentation für wmemcpy
| |