Namespaces
Variants

wcscpy, wcscpy_s

Von de.cppreference.net
 
 
 
 
Definiert in Header <wchar.h>
wchar_t* wcscpy( wchar_t* dest, const wchar_t* src );
(1) (seit C95)
(bis C99)
wchar_t* wcscpy( wchar_t* restrict dest, const wchar_t* restrict src );
(seit C99)
errno_t wcscpy_s( wchar_t* restrict dest, rsize_t destsz,
                  const wchar_t* restrict src );
(2) (seit C11)
1) Kopiert die breite Zeichenkette, auf die src zeigt (einschließlich des abschließenden Null-Breitzeichens), in das Breitzeichen-Array, auf das dest zeigt. Das Verhalten ist undefiniert, wenn das dest-Array nicht groß genug ist. Das Verhalten ist undefiniert, wenn sich die Zeichenketten überschneiden.
2) Wie (1), außer dass der Rest des Zielarrays mit unspezifizierten Werten überschrieben werden kann und dass die folgenden Fehler zur Laufzeit erkannt werden und die derzeit installierte Einschränkungshandler-Funktion aufrufen:
  • src oder dest ist ein Nullzeiger
  • destsz ist null oder größer als RSIZE_MAX / sizeof(wchar_t)
  • destsz ist kleiner oder gleich wcsnlen_s(src, destsz), mit anderen Worten, es würde eine Kürzung auftreten
  • Es würde eine Überschneidung zwischen der Quell- und der Zielzeichenkette auftreten
Wie bei allen grenzgeprüften Funktionen ist wcscpy_s nur dann garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ als die ganzzahlige Konstante 1 definiert, bevor <wchar.h> eingebunden wird.

Parameter

dest - Zeiger auf das Breitzeichen-Array, in das kopiert werden soll
src - Zeiger auf die nullterminierte breite Zeichenkette, von der kopiert werden soll
destsz - maximale Anzahl zu schreibender Zeichen, typischerweise die Größe des Zielpuffers

Rückgabewert

1) gibt eine Kopie von dest
zurück2)L'\0' gibt bei Erfolg Null zurück, bei Fehler einen Wert ungleich Null. Bei einem Fehler wird außerdem dest[0] in dest geschrieben (es sei denn, destsz ist ein Nullzeiger oder RMAX_SIZE / sizeof(wchar_t) ist null oder größer als

).

#include <locale.h>
#include <stdio.h>
#include <wchar.h>

int main(void)
{
    wchar_t* src = L"犬 means dog";
//  src[0] = L'狗' ; // this would be undefined behavior
    wchar_t dst[wcslen(src) + 1]; // +1 for the null terminator
    wcscpy(dst, src);
    dst[0] = L'狗'; // OK

    setlocale(LC_ALL, "en_US.utf8");
    printf("src = %ls\ndst = %ls\n", src, dst);
}

Diesen Code ausführen

src = 犬 means dog
dst = 狗 means dog

Ausgabe:

  • Referenzen
  • C23-Standard (ISO/IEC 9899:2024):
  • 7.31.4.2.1 Die wcscpy-Funktion (S. 438)
  • K.3.9.3.1.1 Die wcscpy_s-Funktion (S. 663)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.29.4.1.2 Die wcscpy-Funktion (S. TBD)
  • K.3.9.2.1.1 Die wcscpy_s-Funktion (S. TBD)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.29.4.1.2 Die wcscpy-Funktion (S. 430)
  • K.3.9.2.1.1 Die wcscpy_s-Funktion (S. 639)
  • C99-Standard (ISO/IEC 9899:1999):

7.24.4.1.2 Die wcscpy-Funktion (S. 376)

wcsncpy_s(C95)
(C11)
kopiert eine bestimmte Anzahl von Breitzeichen von einer Zeichenkette in eine andere
wmemcpy_s(C95)
(C11)
kopiert eine bestimmte Anzahl von Breitzeichen zwischen zwei nicht überlappenden Arrays
(C11)
kopiert eine Zeichenkette in eine andere
(Funktion)C++-Dokumentation für
wcscpy