Функции библиотеки C -mbstowcs()

Стандартная библиотека C - <stdlib.h>

Описание

Функции библиотеки CmbstowcsИспользуется для преобразования многобайтовой строки в строку широких символов.

mbstowcsФункция определена в заголовочном файле <stdlib.h>.

Объявление

Ниже приведено объявление функции mbstowcs().

size_t mbstowcs(wchar_t *pwcs, const char *mbs, size_t n);

Параметр

  • pwcs: Указывает на буфер, используемый для хранения преобразованной строки широких символов. Еслиpwcsравен NULL, функция возвращает требуемую длину буфера, не выполняя фактическое преобразование.
  • mbs: Указатель на многобайтовую строку.
  • n: Максимальное число символов для преобразования. Если до обнаружения завершающего символа преобразование уже было выполненоnсимволов, преобразование прекращается досрочно.

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

  • В случае успеха возвращает количество преобразованных широких символов, не считая завершающего нулевого символа.
  • Если обнаружена недопустимая многобайтовая последовательность, возвращает(size_t)-1, и устанавливаетerrno。

Пример

Следующий пример демонстрирует использование функции mbstowcs().

Пример 1

#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int len; char *pmbnull = NULL; char *pmb = (char *)malloc( MB_CUR_MAX ); wchar_t *pwc = L"Hi"; wchar_t *pwcs = (wchar_t *)malloc( sizeof( wchar_t )); printf("Преобразовать в многобайтовую строку\n"); len = wcstombs( pmb, pwc, MB_CUR_MAX); printf("Преобразованный символ %d\n", len); printf("Шестнадцатеричное значение первого многобайтового символа: %#.4x\n", pmb); printf("Преобразовать обратно в строку широких символов\n"); len = mbstowcs( pwcs, pmb, MB_CUR_MAX); printf("Преобразованный символ %d\n", len); printf("Шестнадцатеричное значение первого широкого символа: %#.4x\n\n", pwcs); return(0); }

Давайте скомпилируем и запустим приведённую выше программу, которая выдаст следующий результат:

转换为多字节字符串
被转换的字符 1
第一个多字节字符的十六进制值:0x19a60010
转换回宽字符字符串
被转换的字符 1
第一个宽字符的十六进制值:0x19a60030

Пример 2

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int main() {
    // Установить текущую локаль в локаль, указанную переменной окружения пользователя
    setlocale(LC_ALL, "");

    // Определить многобайтовую строку
    const char *mbstr = "Hello, world!";
    // Вычислить требуемый размер буфера
    size_t wcs_len = mbstowcs(NULL, mbstr, 0) + 1;

    // Выделить буфер широких символов
    wchar_t *wcs = (wchar_t *)malloc(wcs_len * sizeof(wchar_t));
    if (wcs == NULL) {
        perror("malloc");
        return 1;
    }

    // Выполнить преобразование
    mbstowcs(wcs, mbstr, wcs_len);

    // Вывести строку широких символов
    wprintf(L"%ls\n", wcs);

    // освободить память
    free(wcs);

    return 0;
}

Давайте скомпилируем и запустим приведённую выше программу, которая выдаст следующий результат:

Hello, 世界!

Примечания

  1. Локаль: На поведение функции влияет текущаяlocaleнастройка, обычно при вызовеmbstowcsНеобходимо вызватьsetlocaleчтобы установить соответствующийlocale。
  2. Обработка ошибок: Если входная многобайтовая строка содержит недопустимую многобайтовую последовательность, функция возвращает(size_t)-1и устанавливаетerrno. Вызывающему необходимо проверить возвращаемое значение и обработать возможные ошибки.
  3. Выделение памяти: Вызывающий должен убедитьсяpwcsДостаточно места для хранения преобразованной строки широких символов. Это можно сделать, сначала вызвавmbstowcs, затемpwcsУстановить вNULLчтобы вычислить требуемый размер буфера.

Стандартная библиотека C - <stdlib.h>

Другие расширения