Namensräume
Varianten
Aktionen

wmemmove, wmemmove_s

Von cppreference.com
< c‎ | string‎ | wide
 
 
 
 
Definiert in Header <wchar.h>
wchar_t* wmemmove( wchar_t* dest, const wchar_t* src, size_t count );
(1) (seit C95)
errno_t wmemmove_s( wchar_t *dest, rsize_t destsz,
                    const wchar_t *src, rsize_t count);
(2) (seit C11)
1) Kopiert exakt count aufeinanderfolgende Weitzeichen aus dem von src zeigenden Weitzeichen-Array in das von dest zeigende Weitzeichen-Array. Wenn count Null ist, tut die Funktion nichts. Die Arrays dürfen sich überlappen: das Kopieren erfolgt so, als ob die Weitzeichen in ein temporäres Weitzeichen-Array kopiert und dann aus dem temporären Array nach dest kopiert würden.
2) Dasselbe wie (1), mit der Ausnahme, dass die folgenden Fehler zur Laufzeit erkannt und die aktuell installierte Constraint Handler-Funktion aufgerufen wird
  • src oder dest ist ein Null-Zeiger
  • destsz oder count ist größer als RSIZE_MAX / sizeof(wchar_t)
  • count ist größer als destsz (Überlauf 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

[bearbeiten] 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
destsz - Maximale Anzahl von zu schreibenden Weitzeichen (Größe des Zielpuffers)
zählt - Anzahl der zu kopierenden Wide-Zeichen

[bearbeiten] Rückgabewert

1) Gibt eine Kopie von dest zurück
2) Gibt Null bei Erfolg zurück, gibt einen von Null verschiedenen Wert bei einem Fehler zurück. Außerdem wird im Fehlerfall das gesamte dst bis einschließlich und nicht ausschließlich dst+dstsz mit Null-Weitzeichen, L'\0' gefüllt (es sei denn, dest ist Null oder destsz ist größer als RSIZE_MAX/sizeof(wchar_t))

[bearbeiten] Hinweise

Diese Funktion ist nicht gebietsschemaabhängig und berücksichtigt nicht die Werte der wchar_t-Objekte, die sie kopiert: Null-Zeichen sowie ungültige Zeichen werden ebenfalls kopiert.

[bearbeiten] Beispiel

#include <locale.h>
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
 
    wchar_t str[] = L"αβγδεζηθικλμνξοπρστυφχψω";
    printf("%ls\n", str);
    wmemmove(str + 4, str + 3, 3); // copy from [δεζ] to [εζη]
    printf("%ls\n", str);
}

Ausgabe

αβγδεζηθικλμνξοπρστυφχψω
αβγδδεζθικλμνξοπρστυφχψω

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.29.4.2.4 Die Funktion wmemmove (S. TBD)
  • K.3.9.2.1.4 Die Funktion wmemmove_s (S. TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.29.4.2.4 Die Funktion wmemmove (S. TBD)
  • K.3.9.2.1.4 Die Funktion wmemmove_s (S. TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.29.4.2.4 Die Funktion wmemmove (S. 432)
  • K.3.9.2.1.4 Die Funktion wmemmove_s (S. 642)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.24.4.2.4 Die Funktion wmemmove (S. 378)

[bearbeiten] Siehe auch

verschiebt einen Puffer in einen anderen
(Funktion) [bearbeiten]
kopiert eine bestimmte Anzahl breiter Zeichen zwischen zwei nicht überlappenden Arrays
(Funktion) [bearbeiten]
C++ Dokumentation für wmemmove