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) |
- Wenn str != NULL, wird der Aufruf als erster Aufruf von
wcstokfür diesen speziellen Wide-String behandelt. Die Funktion sucht nach dem ersten Wide-Zeichen, das *nicht* in delim enthalten ist.
- Wenn kein solches Wide-Zeichen gefunden wird, gibt es überhaupt keine Tokens in str, und die Funktion gibt einen Nullzeiger zurück.
- Wenn ein solches Wide-Zeichen gefunden wird, ist es der *Anfang des Tokens*. Die Funktion sucht dann von diesem Punkt aus nach dem ersten Wide-Zeichen, das *in* delim enthalten ist.
- Wenn kein solches Wide-Zeichen gefunden wird, hat str nur ein Token, und zukünftige Aufrufe von
wcstokgeben einen Nullzeiger zurück. - Wenn ein solches Wide-Zeichen gefunden wird, wird es *durch das Null-Wide-Zeichen* L'\0' *ersetzt*, und der Parser-Status (typischerweise ein Zeiger auf das nachfolgende Wide-Zeichen) wird an der vom Benutzer bereitgestellten Stelle *ptr gespeichert.
- Wenn kein solches Wide-Zeichen gefunden wird, hat str nur ein Token, und zukünftige Aufrufe von
- Die Funktion gibt dann den Zeiger auf den Anfang des Tokens zurück.
- Wenn str == NULL, wird der Aufruf als nachfolgender Aufruf von
wcstokbehandelt: Die Funktion fährt dort fort, wo sie im vorherigen Aufruf mit demselben *ptr aufgehört hat. Das Verhalten ist dasselbe, als ob der Zeiger auf das Wide-Zeichen, das auf das zuletzt erkannte Token folgt, als str übergeben wird.
- Wenn 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 des Quellstrings (gemessen am Anfangswert von *strmax), ohne den Null-Terminator zu finden.
- Wie alle grenzgeprüften Funktionen ist
wcstok_snur dann garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert wird und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von <wchar.h> auf die ganzzahlige Konstante 1 setzt.
Inhalt |
[bearbeiten] Parameter
| str | - | Zeiger auf den Null-terminierten Wide-String, der tokenisiert werden soll. |
| delim | - | Zeiger auf den Null-terminierten Wide-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 prüfenden Zeichen. |
[bearbeiten] Rückgabewert
Gibt den Zeiger auf den Anfang des nächsten Tokens oder einen Nullzeiger zurück, wenn keine weiteren Tokens vorhanden sind.
[bearbeiten] 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 aktualisiert wcstok keinen statischen Speicher: Es speichert den Parser-Status an der vom Benutzer bereitgestellten Stelle.
Im Gegensatz zu den meisten anderen Tokenizern können die Trennzeichen bei wcstok für jedes nachfolgende Token unterschiedlich sein und sogar vom Inhalt der vorherigen Tokens abhängen.
Die Implementierung von wcstok_s in der Windows CRT ist inkompatibel mit dem C-Standard, sie ist lediglich ein Alias für wcstok.
[bearbeiten] 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'
[bearbeiten] 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)
[bearbeiten] Siehe auch
| (C11) |
findet das nächste Token in einem Byte-String (Funktion) |
| C++ Dokumentation für wcstok
| |