wcstok, wcstok_s
|
Definiert in Header
<wchar.h>
|
||
| (1) | ||
|
wchar_t
*
wcstok
(
wchar_t
*
str,
const
wchar_t
*
delim,
wchar_t
**
ptr
)
;
|
(seit C95)
(bis C99) |
|
|
wchar_t
*
wcstok
(
wchar_t
*
restrict
str,
const
wchar_t
*
restrict
delim,
wchar_t ** restrict ptr ) ; |
(seit C99) | |
|
wchar_t
*
wcstok_s
(
wchar_t
*
restrict
str, rsize_t
*
restrict
strmax,
const wchar_t * restrict delim, wchar_t ** restrict ptr ) ; |
(2) | (seit C11) |
-
-
Falls
str
!
=
NULL
, wird der Aufruf als erster Aufruf von
wcstokfür diese spezielle Breitzeichenkette behandelt. Die Funktion sucht nach dem ersten Breitzeichen, das nicht in delim enthalten ist.
-
- Falls kein solches Breitzeichen gefunden wurde, existieren keine Tokens in str , und die Funktion gibt einen Nullzeiger zurück.
- Falls ein solches Breitzeichen gefunden wurde, stellt es den Beginn des Tokens dar. Die Funktion sucht dann ab diesem Punkt nach dem ersten Breitzeichen, das in delim enthalten ist.
-
-
Falls kein solches Breitzeichen gefunden wurde, enthält
str
nur ein Token, und zukünftige Aufrufe von
wcstokgeben einen Nullzeiger zurück. - Falls ein solches Breitzeichen gefunden wurde, wird es ersetzt durch das Null-Breitzeichen L ' \0 ' und der Parserzustand (typischerweise ein Zeiger auf das folgende Breitzeichen) wird im benutzerdefinierten Speicherort * ptr gespeichert.
-
Falls kein solches Breitzeichen gefunden wurde, enthält
str
nur ein Token, und zukünftige Aufrufe von
- Die Funktion gibt dann den Zeiger auf den Beginn des Tokens zurück.
-
Falls
str
==
NULL
, wird der Aufruf als nachfolgender Aufruf von
wcstokbehandelt: Die Funktion setzt dort fort, wo sie beim vorherigen Aufruf mit demselben * ptr aufgehört hat. Das Verhalten entspricht dem, als ob der Zeiger auf das Breitzeichen, das auf das letzte erkannte Token folgt, als str übergeben wird.
-
Falls
str
!
=
NULL
, wird der Aufruf als erster Aufruf von
-
- strmax , delim oder ptr ist ein Nullzeiger
- bei einem nicht-initialen Aufruf (mit null str ) ist * ptr ein Nullzeiger
- beim ersten Aufruf ist * strmax null oder größer als RSIZE_MAX / sizeof ( wchar_t )
- die Suche nach dem Ende eines Tokens erreicht das Ende der Quellzeichenkette (gemessen am Anfangswert von * strmax ), ohne das Nullterminierungszeichen zu finden
-
Wie alle bounds-checked-Funktionen ist
wcstok_snur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <wchar.h> eingebunden wird.
Inhaltsverzeichnis |
Parameter
| str | - | Zeiger auf die nullterminierte Breitzeichen-Zeichenkette, die zu tokenisieren ist |
| delim | - | Zeiger auf die nullterminierte Breitzeichen-Zeichenkette, die Trennzeichen identifiziert |
| ptr | - |
Zeiger auf ein Objekt vom Typ
wchar_t
*
, das sowohl von
wcstok
als auch von
wcstok_s
verwendet wird, um den internen Zustand des Parsers zu speichern
|
| strmax | - | Zeiger auf ein Objekt, das anfänglich die Größe von str enthält: wcstok_s speichert die Anzahl der noch zu untersuchenden Zeichen |
Rückgabewert
Gibt einen Zeiger auf den Anfang des nächsten Tokens zurück oder einen Nullzeiger, wenn keine weiteren Tokens vorhanden sind.
Hinweis
Diese Funktion ist destruktiv: Sie schreibt die
L
'
\0
'
Zeichen in die Elemente des Strings
str
. Insbesondere kann ein Wide-String-Literal nicht als erstes Argument von
wcstok
verwendet werden.
Im Gegensatz zu
strtok
,
wcstok
aktualisiert keinen statischen Speicher: Es speichert den Parser-Zustand im benutzerbereitgestellten Speicherort.
Im Gegensatz zu den meisten anderen Tokenizern können die Trennzeichen in
wcstok
für jeden nachfolgenden Token unterschiedlich sein und können sogar von den Inhalten der vorherigen Token abhängen.
Die Implementierung von wcstok_s im Windows CRT ist nicht mit dem C-Standard kompatibel, es handelt sich lediglich um einen Alias für wcstok .
Beispiel
#include <stdio.h> #include <wchar.h> int main(void) { wchar_t input[] = L"A bird came down the walk"; printf("Parsing the input string '%ls'\n", input); wchar_t* buffer; wchar_t* token = wcstok(input, L" ", &buffer); while (token) { printf("%ls\n", token); token = wcstok(NULL, L" ", &buffer); } printf("Contents of the input string now: '"); for (size_t n = 0; n < sizeof input / sizeof *input; ++n) input[n] ? printf("%lc", input[n]) : printf("\\0"); puts("'"); }
Ausgabe:
Parsing the input string 'A bird came down the walk' A bird came down the walk Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'
Referenzen
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.29.4.5.7 Die wcstok-Funktion (S: 437-438)
-
- K.3.9.2.3.1 Die wcstok_s-Funktion (S: 645-646)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.24.4.5.7 Die wcstok-Funktion (S: 383-384)
Siehe auch
|
(C11)
|
findet das nächste Token in einer Byte-Zeichenkette
(Funktion) |
|
C++-Dokumentation
für
wcstok
|
|