wcstok, wcstok_s
| Deklariert im Header <wchar.h>
|
||
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t** ptr );
|
(1) | (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) |
str zeigt. Die Trennzeichen werden durch den nullterminierten Breit-String identifiziert, auf den delim zeigt.- Wenn
str != NULL, wird der Aufruf als erster Aufruf vonwcstokfür diesen bestimmten Breit-String behandelt. Die Funktion sucht nach dem ersten Breitzeichen, das nicht indelimenthalten ist.
- Wenn kein solches Breitzeichen gefunden wurde, gibt es überhaupt keine Token in
str, und die Funktion gibt einen Nullzeiger zurück. - Wenn ein solches Breitzeichen gefunden wurde, ist es der Anfang des Tokens. Die Funktion sucht dann von dieser Stelle aus nach dem ersten Breitzeichen, das in
delimenthalten ist.
- Wenn kein solches Breitzeichen gefunden wurde, hat
strnur ein Token, und zukünftige Aufrufe vonwcstokgeben einen Nullzeiger zurück. - Wenn ein solches Breitzeichen gefunden wurde, wird es ersetzt durch das Null-Breitzeichen
L'\0'und der Parser-Zustand (normalerweise ein Zeiger auf das folgende Breitzeichen) wird in der vom Benutzer bereitgestellten Stelle*ptrgespeichert.
- Wenn kein solches Breitzeichen gefunden wurde, hat
- Die Funktion gibt dann den Zeiger auf den Anfang des Tokens zurück.
- Wenn kein solches Breitzeichen gefunden wurde, gibt es überhaupt keine Token in
- Wenn
str == NULL, wird der Aufruf als ein nachfolgender Aufruf vonwcstokbehandelt: Die Funktion setzt dort fort, wo sie beim vorherigen Aufruf mit dem gleichen*ptraufgehört hat. Das Verhalten ist das gleiche, als ob der Zeiger auf das Breitzeichen, das dem zuletzt erkannten Token folgt, alsstrübergeben wird.
- Wenn
str in *strmax geschrieben wird. Wiederholte Aufrufe (mit Null-str) müssen sowohl strmax als auch ptr mit den Werten des vorherigen Aufrufs übergeben. Außerdem werden die folgenden Fehler zur Laufzeit erkannt und rufen die derzeit installierte Constraint-Handler-Funktion auf, ohne etwas in das Objekt zu speichern, auf das ptr
strmax,delimoderptrein Nullzeiger ist- bei einem nicht-initialen Aufruf (mit Null-
str) ist*ptrein Nullzeiger - beim ersten Aufruf ist
*strmaxnull oder größer alsRSIZE_MAX / sizeof(wchar_t) - die Suche nach dem Ende eines Tokens erreicht das Ende des Quellstrings (gemessen am Anfangswert von
*strmax), ohne auf den Nullterminator zu stoßen
wcstok_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor der Einbindung von 1wchar.h< als die Integer-Konstante > definiert.Parameter
| str | - | Zeiger auf den zu tokenisierenden nullterminierten Breit-String |
| delim | - | Zeiger auf den nullterminierten Breit-String, der 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 anfangs 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 oder einen Nullzeiger zurück, wenn es keine weiteren Token gibt.
Hinweis
Diese Funktion ist destruktiv: Sie schreibt die L'\0'-Zeichen in die Elemente des Strings str. Insbesondere kann ein Breit-String-Literal nicht als erstes Argument von wcstok verwendet werden.
Im Gegensatz zu strtok aktualisiert wcstok keinen statischen Speicher: Es speichert den Parser-Zustand in der vom Benutzer bereitgestellten Stelle.
Im Gegensatz zu den meisten anderen Tokenizern können die Trennzeichen in wcstok für jedes nachfolgende Token unterschiedlich sein und sogar vom Inhalt der vorherigen Token abhängen.
Die Implementierung von wcstok_s in der Windows CRT ist nicht mit dem C-Standard kompatibel; sie ist lediglich ein 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 Funktion wcstok (S. 437-438)
- K.3.9.2.3.1 Die Funktion wcstok_s (S. 645-646)
- C99-Standard (ISO/IEC 9899:1999):
- 7.24.4.5.7 Die Funktion wcstok (S. 383-384)
Siehe auch
(C11) |
findet das nächste Token in einem Byte-String (Funktion) |
C++-Dokumentation für wcstok
| |