mbtowc
|
Определено в заголовочном файле
<stdlib.h>
|
||
|
int
mbtowc
(
wchar_t
*
pwc,
const
char
*
s,
size_t
n
)
|
(до C99) | |
|
int
mbtowc
(
wchar_t
*
restrict
pwc,
const
char
*
restrict
s,
size_t
n
)
|
(начиная с C99) | |
Преобразует многобайтовый символ, первый байт которого указывается s , в широкий символ, записываемый в * pwc , если pwc не является нулевым указателем.
Если s является нулевым указателем, сбрасывает глобальное состояние преобразования и определяет, используются ли сдвиговые последовательности.
Содержание |
Примечания
Каждый вызов
mbtowc
обновляет внутреннее глобальное состояние преобразования (статический объект типа
mbstate_t
, известное только этой функции). Если многобайтовая кодировка использует состояния сдвига, необходимо избегать возвратов или множественного сканирования. В любом случае, несколько потоков не должны вызывать
mbtowc
без синхронизации:
mbrtowc
может быть использована вместо этого.
Параметры
| pwc | - | указатель на широкий символ для вывода |
| s | - | указатель на многобайтовый символ |
| n | - | ограничение на количество байтов в s, которые могут быть проверены |
Возвращаемое значение
Если s не является нулевым указателем, возвращает количество байтов, содержащихся в многобайтовом символе, или - 1 если первые байты, на которые указывает s не образуют корректный многобайтовый символ, или 0 если s указывает на нулевой символ ' \0 ' .
Если s является нулевым указателем, сбрасывает внутреннее состояние преобразования для представления начального состояния сдвига и возвращает 0 если текущая многобайтовая кодировка не зависит от состояния (не использует последовательности сдвига) или ненулевое значение если текущая многобайтовая кодировка зависит от состояния (использует последовательности сдвига).
Пример
#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wchar.h> // print multibyte string to wide-oriented stdout // equivalent to wprintf(L"%s\n", ptr); void print_mb(const char* ptr) { mbtowc(NULL, NULL, 0); // reset the conversion state const char* end = ptr + strlen(ptr); int ret = 0; for (wchar_t wc; (ret = mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret) wprintf(L"%lc", wc); wprintf(L"\n"); } int main(void) { setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding print_mb("z\u00df\u6c34\U0001F34C"); // or "zß水🍌" }
Вывод:
zß水🍌
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.24.7.2 Функция mbtowc (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.22.7.2 Функция mbtowc (стр. 260)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.22.7.2 Функция mbtowc (стр. 358)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.20.7.2 Функция mbtowc (стр. 322)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.7.2 Функция mbtowc
Смотрите также
|
(C95)
|
преобразует следующий многобайтовый символ в широкий символ с учетом состояния
(функция) |
|
возвращает количество байтов в следующем многобайтовом символе
(функция) |
|
|
C++ documentation
для
mbtowc
|
|