wcstok(3) разделяет широкосимвольную строку на элементы (токены)

ОБЗОР

#include <wchar.h>


wchar_t *wcstok(wchar_t *wcs, const wchar_t *delim, wchar_t **ptr);

ОПИСАНИЕ

Функция wcstok() является эквивалентом функции strtok(3) для широкосимвольных строк, но к ней добавлен аргумент для поддержки работы в нитях. Она может использоваться для разбиения широкосимвольной строки wcs на элементы, где элементом считается подстрока, не включающая в себя широкие символы из строки delim.

Поиск начинается с wcs, если wcs не равно NULL, или с *ptr, если значение wcs равно NULL. Сначала пропускаются все разграничительные широкие символы, т.е. указатель «перепрыгивает» через все широкие символы, которые встречаются в delim. Достигнув конца строки, wcstok() возвращает NULL, тем самым сообщая, что не было найдено ни одного элемента, и сохраняет соответствующее значение в *ptr. Таким образом, последующие вызовы wcstok() будут возвращать NULL. В противном случае функция wcstok() распознает начало элемента и возвращает указатель на него, но перед тем, как это сделать, она завершает нулём найденный элемент, заменяя следующий широкий символ, который встретился в delim, на символ L'\0' и обновляет *ptr так, что последующие вызовы будут продолжать поиск после найденного элемента.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Функция wcstok() возвращает указатель на следующий элемент или NULL, если больше элементов не найдено.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
ИнтерфейсАтрибутЗначение
wcstok() безвредность в нитяхбезвредно (MT-Safe)

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001, POSIX.1-2008, C99.

ЗАМЕЧАНИЯ

Исходная широкосимвольная строка wcs может измениться в процессе работы функции.

ПРИМЕР

Следующий код в ходе работы цикла выводит все элементы, содержащиеся в широкосимвольной строке.

wchar_t *wcs = ...;
wchar_t *token;
wchar_t *state;
for (token = wcstok(wcs, " \t\n", &state);
    token != NULL;
    token = wcstok(NULL, " \t\n", &state)) {
    ...
}