Пространства имён
Варианты
Действия

std::wcstombs

Материал из cppreference.com
< cpp‎ | string‎ | multibyte
Определено в заголовочном файле <cstdlib>
std::size_t wcstombs( char* dst, const wchar_t* src, std::size_t len);

Преобразует последовательность широких символов, которые хранятся в массиве, на чей первый элемент указывает src, в её в прямое мультибайтовое представление, которое начинается с первоначального состояния сдвига регистра. Сконвертированные символы сохраняются в последовательные элементы массива символов, на который указывает dst. Не больше чем len байтов может быть записано в массив назначения.

Каждый символ конвертируется так, как если была вызвана функция std::wctomb, только с той разницей что состояние сдвига регистра wctomb не затрагивается. Процесс преобразования прекращается, если:

  • Нулевой символ были преобразован и сохранён
  • Был найден такой wchar_t, что его нельзя в текущей Си-локале преобразовать в правильный символ
  • Сохранение следующего мультибайтового символа превышает предел len.

Содержание

[править] Примечание

В большинстве реализаций эта функция обновляет глобальный статический объект типа std::mbstate_t во время обработки строки. Она не может быть вызвана одновременно из двух потоков, в этих случаях можно воспользоваться std::wcsrtombs.

Специфическое для POSIX расширение: Если dst - нулевой указатель, то эта функция возвращает количество байт, которое можно было записать в dst в случае преобразования. Подобное поведение также характерно для std::wcsrtombs.

[править] Параметры

dst - Указатель на массив мультибайтовых символов, куда будет сохранён результат преобразования
src - Указатель на первый символ нульзавершённой широкой строки
len - Количество байтов доступных для сохранения в dst

[править] Возвращаемое значение

В случае успеха возвращается количество байт (включая все последовательности сдвига регистра, но не включая завершающий '\0'), которое было записано в массив из символов, на первый элемент которого указывает dst.

В случае неудачного преобразования (при обнаружении некорректного широкого символа) возвращается static_cast<std::size_t>(-1).

[править] Пример

#include <iostream>
#include <clocale>
#include <cstdlib>
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // Мультибайтовый UTF-8
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // Или L"zß水𝄋"
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout << "Мультибайтовая строка: " << mbstr << '\n';
}

Вывод:

Мультибайтовая строка: zß水𝄋

[править] См. также

Преобразует строку широких к узким многобайтовой строки символов, данное состояние
Оригинал:
converts a wide string to narrow multibyte character string, given state
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
Преобразует узкую многобайтовую символьную строку в многобайтовую широкую строку
(функция) [править]
[virtual]
преобразует строку из internT в externT, например, при записи в файл
Оригинал:
converts a string from internT to externT, such as when writing to file
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(virtual protected std::codecvt функция-член) [править]
C documentation for wcstombs