Namespaces
Variants

std:: mbsinit

From cppreference.net
Определено в заголовке <cwchar>
int mbsinit ( const std:: mbstate_t * ps ) ;

Если ps не является нулевым указателем, функция mbsinit определяет, описывает ли указываемый объект std::mbstate_t начальное состояние преобразования.

Содержание

Примечания

Хотя обнулённый std::mbstate_t всегда представляет начальное состояние преобразования, могут существовать и другие значения std::mbstate_t , которые также представляют начальное состояние преобразования.

Параметры

ps - указатель на объект std::mbstate_t для исследования

Возвращаемое значение

0 если ps не является нулевым указателем и не представляет начальное состояние преобразования, в противном случае - ненулевое значение.

Пример

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
int main()
{
    // разрешить mbrlen() работать с многобайтовой кодировкой UTF-8
    std::setlocale(LC_ALL, "en_US.utf8");
    // многобайтовая кодировка UTF-8
    std::string str = "水"; // или u8"\u6c34" или "\xe6\xb0\xb4"
    std::mbstate_t mb = std::mbstate_t();
    (void)std::mbrlen(&str[0], 1, &mb);
    if (!std::mbsinit(&mb))
        std::cout << "После обработки первого 1 байта " << str
                  << " состояние преобразования не является начальным\n";
    (void)std::mbrlen(&str[1], str.size() - 1, &mb);
    if (std::mbsinit(&mb))
        std::cout << "После обработки оставшихся 2 байтов " << str
                  << ", состояние преобразования является начальным состоянием преобразования\n";
}

Вывод:

После обработки первого 1 байта 水 состояние преобразования не является начальным
После обработки оставшихся 2 байтов 水, состояние преобразования является начальным состоянием преобразования

Смотрите также

информация о состоянии преобразования, необходимая для итерации многобайтовых строк символов
(класс)
C documentation для mbsinit