Namespaces
Variants

wcsncat, wcsncat_s

Von de.cppreference.net
 
 
 
 
Definiert in Header <wchar.h>
wchar_t* wcsncat( wchar_t* dest, const wchar_t* src, size_t count );
(1) (seit C95)
(bis C99)
wchar_t* wcsncat( wchar_t* restrict dest,
                  const wchar_t* restrict src, size_t count );
(seit C99)
errno_t wcsncat_s( wchar_t* restrict dest, rsize_t destsz,
                   const wchar_t* restrict src, rsize_t count );
(2) (seit C11)
1) Hängt höchstens count weite Zeichen von der weiten Zeichenkette, auf die src zeigt, an das Ende der Zeichenkette an, auf die dest zeigt, wobei angehalten wird, wenn der Nullterminator kopiert wird. Der weite Zeichen src[0] ersetzt den Nullterminator am Ende von dest. Der Nullterminator wird immer am Ende angehängt (die maximale Anzahl von weiten Zeichen, die die Funktion schreiben kann, ist daher count + 1).
Das Verhalten ist undefiniert, wenn das Ziel-Array nicht groß genug für den Inhalt von src und dest sowie den terminierenden Null-weiten-Zeichen ist.
Das Verhalten ist undefiniert, wenn sich die Zeichenketten überschneiden.
2) Wie (1), außer dass diese Funktion den Rest des Ziel-Arrays (ab dem letzten geschriebenen weiten Zeichen bis destsz) überschreiben 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 oder count ist Null oder größer als RSIZE_MAX / sizeof(wchar_t)
  • es gibt kein Null-weites-Zeichen in den ersten destsz weiten Zeichen von dest
  • Kürzung würde auftreten: count oder die Länge von src, je nachdem, was kleiner ist, überschreitet den verfügbaren Platz zwischen dem Nullterminator von dest und destsz.
  • Es würde eine Überschneidung zwischen der Quell- und der Zielzeichenkette auftreten
Wie bei allen Funktionen mit Grenzprüfung ist wcsncat_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ auf die ganzzahlige Konstante 1 vor dem Einbinden von <wchar.h> definiert.

Parameter

dest - Zeiger auf die nullterminierte weite Zeichenkette, an die angehängt werden soll
src - Zeiger auf die nullterminierte weite Zeichenkette, von der kopiert werden soll
count - maximale Anzahl zu kopierender weiter Zeichen
destsz - die Größe des Ziel-Puffers

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 (außer wenn destsz ein Nullzeiger ist oder RSIZE_MAX / sizeof(wchar_t) Null oder größer als

ist).

Anmerkungenwcsncat_sObwohl das Kürzen auf die Größe des Zielpuffers ein Sicherheitsrisiko darstellt und daher eine Verletzung der Laufzeitbeschränkung für count ist, kann das Kürzungsverhalten erreicht werden, indem man count gleich der Größe des Zielarrays minus eins setzt: Es werden die ersten

size_t count = sizeof dst / sizeof *dst;
wcsncat_s(dst, count, src, count - wcsnlen_s(dst, count) - 1);

weiten Zeichen kopiert und wie immer der Nullterminator angehängt:

#include <locale.h>
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
    wchar_t str[50] = L"Земля, прощай.";
    wcsncat(str, L" ", 1);
    wcsncat(str, L"В добрый путь.", 8); // only append the first 8 wide chars
    setlocale(LC_ALL, "en_US.utf8");
    printf("%ls", str);
}

Mögliche Ausgabe:

Земля, прощай. В добрый

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.31.4.3.2 Die Funktion wcsncat (S. 439)
  • K.3.9.3.2.2 Die Funktion wcsncat_s (S. 666)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.29.4.3.2 Die Funktion wcsncat (S. 315)
  • K.3.9.2.2.2 Die Funktion wcsncat_s (S. 466-467)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.29.4.3.2 Die Funktion wcsncat (S. 432-433)
  • K.3.9.2.2.2 Die Funktion wcsncat_s (S. 643-644)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.24.4.3.2 Die Funktion wcsncat (S. 378-379)

Siehe auch

(C95)(C11)
hängt eine Kopie einer weiten Zeichenkette an eine andere an
(Funktion)
verbindet eine bestimmte Anzahl von Zeichen zweier Zeichenketten
(Funktion)
(C95)(C11)
kopiert eine weite Zeichenkette in eine andere
(Funktion)
C++-Dokumentation für wcsncat