Namespaces
Variants

wcsncat, wcsncat_s

From cppreference.net
< c ‎ | string ‎ | wide
Definiert in Header <wchar.h>
(1)
wchar_t * wcsncat ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(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) Fügt maximal count Breitzeichen von der Breitzeichenfolge, auf die src zeigt, an das Ende der Zeichenfolge, auf die dest zeigt, hinzu und stoppt, wenn der Nullterminator kopiert wird. Das Breitzeichen src [ 0 ] ersetzt den Nullterminator am Ende von dest . Der Nullterminator wird immer am Ende angehängt (daher beträgt die maximale Anzahl von Breitzeichen, die die Funktion schreiben kann, count + 1 ).
Das Verhalten ist undefiniert, wenn das Zielarray nicht groß genug für die Inhalte von sowohl str als auch dest und das abschließende Null-Breitzeichen ist.
Das Verhalten ist undefiniert, wenn sich die Zeichenketten überlappen.
2) Gleich wie (1) , außer dass diese Funktion den Rest des Zielarrays (ab dem letzten geschriebenen Breitzeichen bis destsz ) überschreiben kann und dass die folgenden Fehler zur Laufzeit erkannt werden und die aktuell installierte constraint handler -Funktion aufrufen:
  • src oder dest ist ein null pointer
  • destsz oder count ist null oder größer als RSIZE_MAX / sizeof ( wchar_t )
  • Es gibt kein null wide character in den ersten destsz Breitzeichen von dest
  • Trunkierung würde auftreten: count oder die Länge von src , je nachdem was kleiner ist, überschreitet den verfügbaren Platz zwischen dem null terminator von dest und destsz .
  • Überlappung würde zwischen den Quell- und Zielzeichenfolgen auftreten
Wie bei allen bounds-checked functions ist wcsncat_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <wchar.h> eingebunden wird.

Inhaltsverzeichnis

Parameter

dest - Zeiger auf die nullterminierte Breitzeichen-Zeichenkette, an die angehängt werden soll
src - Zeiger auf die nullterminierte Breitzeichen-Zeichenkette, von der kopiert werden soll
count - maximale Anzahl an zu kopierenden Breitzeichen
destsz - Größe des Zielpuffers

Rückgabewert

1) gibt eine Kopie von dest zurück
2) gibt bei Erfolg Null zurück, gibt bei Fehler einen Wert ungleich Null zurück. Außerdem wird bei Fehler L ' \0 ' in dest [ 0 ] geschrieben (sofern dest kein Nullzeiger ist oder destsz nicht Null oder größer als RSIZE_MAX / sizeof ( wchar_t ) ist).

Hinweise

Obwohl das Abschneiden zur Anpassung an den Zielpuffer ein Sicherheitsrisiko darstellt und daher einen Verstoß gegen die Laufzeitbeschränkungen für wcsncat_s darstellt, ist es möglich, das abschneidende Verhalten zu erreichen, indem count gleich der Größe des Zielarrays minus eins angegeben wird: Es werden die ersten count Breitzeichen kopiert und wie immer der Nullterminator angehängt: wcsncat_s ( dst, sizeof dst / sizeof * dst, src, ( sizeof dst / sizeof * dst ) - wcsnlen_s ( dst, sizeof dst / sizeof * dst ) - 1 ) ;

Beispiel

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

Mögliche Ausgabe:

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

Referenzen

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

Siehe auch

(C95) (C11)
hängt eine Kopie eines breiten Strings an einen anderen an
(Funktion)
verkettet eine bestimmte Anzahl von Zeichen zweier Strings
(Funktion)
(C95) (C11)
kopiert einen breiten String in einen anderen
(Funktion)
C++-Dokumentation für wcsncat