wcstok, wcstok_s
Определено в заголовке <wchar.h> | ||
|---|---|---|
| (1) | ||
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t **ptr ); | (с C95) (до C99) | |
wchar_t *wcstok(wchar_t * restrict str, const wchar_t * restrict delim,
wchar_t **restrict ptr);
| (с C99) | |
wchar_t *wcstok_s( wchar_t *restrict str, rsize_t *restrict strmax,
const wchar_t *restrict delim, wchar_t **restrict ptr);
| (2) | (с C11) |
str. Символы-разделители определяются строкой широких символов с нулевым завершением, на которую указывает delim. - Если
str != NULL, вызов рассматривается как первый вызовwcstokдля этой конкретной строки широких символов. Функция ищет первый широкий символ, не входящий вdelim. - Если такой широкий символ не найден, токов в
strвообще нет, и функция возвращает указатель null. - Если такой широкий символ найден, он является началом токена. Функция затем ищет с этого момента первый широкий символ, входящий в
delim. - Если такой широкий символ не найден, в
strсодержится только один токен, и последующие вызовыwcstokбудут возвращать указатель null - Если такой широкий символ найден, он заменяется нулевым широким символом
L'\0'и состояние анализатора (обычно указатель на следующий широкий символ) сохраняется в предоставленном пользователем месте*ptr. - Затем функция возвращает указатель на начало токена.
- Если
str == NULL, вызов рассматривается как последующий вызовwcstok: функция продолжает с того места, где она остановилась в предыдущем вызове с тем же*ptr. Поведение такое же, как если бы в качествеstrбыл передан указатель на широкий символ, следующий за последним обнаруженным токеном.
str в *strmax. Повторные вызовы (с нулевым str) должны передавать как strmax, так и ptr с значениями, сохранёнными предыдущим вызовом. Кроме того, следующие ошибки обнаруживаются во время выполнения и вызывают текущую установленную функцию обработчика ограничений обработчика ограничений, не сохраняя ничего в объекте, на который указывает ptr: -
-
strmax,delim, илиptr— это указатель null - при повторном вызове (с нулевым
str)*ptr— это указатель null - при первом вызове
*strmaxравно нулю или большеRSIZE_MAX/sizeof(wchar_t) - поиск конца токена достигает конца исходной строки (как определяется начальным значением
*strmax), не обнаружив нулевого терминатора
-
- Как и все функции с проверкой границ,
wcstok_sгарантируется доступным только в том случае, если__STDC_LIB_EXT1__определено реализацией, и если пользователь определяет__STDC_WANT_LIB_EXT1__как целую константу1перед включениемwchar.h.
Параметры
| str | - | указатель на строку широких символов с нулевым завершением для токенизации |
| delim | - | указатель на строку широких символов с нулевым завершением, определяющую разделители |
| ptr | - | указатель на объект типа wchar_t*, который используется как wcstok, так и wcstok_s для хранения внутреннего состояния анализатора |
| strmax | - | указатель на объект, который изначально содержит размер str: wcstok_s сохраняет количество символов, которые предстоит проверить |
Значение возврата
Возвращает указатель на начало следующего токена или указатель null, если больше токенов нет.
Примечание
Эта функция является деструктивной: она записывает L'\0' символов в элементы строки str. В частности, строковая константа широких символов не может использоваться в качестве первого аргумента wcstok.
В отличие от strtok, wcstok не обновляет статические данные: она сохраняет состояние анализатора в предоставленном пользователем месте.
В отличие от большинства других токенизаторов, разделители в wcstok могут быть разными для каждого последующего токена и даже могут зависеть от содержимого предыдущих токенов.
Пример
#include <wchar.h>
#include <stdio.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("'");
}Вывод:
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'
Справочные материалы
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.29.4.5.7 Функция wcstok (с. 437-438)
- K.3.9.2.3.1 Функция wcstok_s (с. 645-646)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.24.4.5.7 Функция wcstok (с. 383-384)
См. также
|
(C11) | находит следующий токен в строке байтов (функция) |
Документация C++ для wcstok |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/wide/wcstok