Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье
Преобразует последовательность многобайтовых символов в соответствующую последовательность расширенных символов. Доступны более безопасные версии этих функций; see mbstowcs_s
, _mbstowcs_s_l
.
size_t mbstowcs(
wchar_t *wcstr,
const char *mbstr,
size_t count
);
size_t _mbstowcs_l(
wchar_t *wcstr,
const char *mbstr,
size_t count,
_locale_t locale
);
template <size_t size>
size_t mbstowcs(
wchar_t (&wcstr)[size],
const char *mbstr,
size_t count
); // C++ only
template <size_t size>
size_t _mbstowcs_l(
wchar_t (&wcstr)[size],
const char *mbstr,
size_t count,
_locale_t locale
); // C++ only
wcstr
Адрес последовательности расширенных символов.
mbstr
Адрес последовательности многобайтовых символов, заканчивающейся нуль-символом.
count
Наибольшее число многобайтовых символов для преобразования.
locale
Используемый языковой стандарт.
Если функция mbstowcs
успешно преобразовывает исходную строку, возвращается число преобразованных многобайтовых символов. Если аргумент wcstr
имеет значение NULL
, функция возвращает необходимый размер (в расширенных символах) строки назначения. Если mbstowcs
возникает недопустимый многобайтовый символ, возвращается значение -1. Если возвращаемое значение равно count
, строка с широким символом не завершается значением NULL.
Важно!
Убедитесь, что строки wcstr
и mbstr
не перекрываются, и что параметр count
правильно отражает количество преобразуемых многобайтовых символов.
Функция mbstowcs
преобразовывает не более count
многобайтовых символов, указанных в параметре mbstr
, в строку соответствующих расширенных символов, определяемых текущим языковым стандартом. Он сохраняет результирующая строка с широким символом в адресе, представленном wcstr
. Результат аналогичен последовательности вызовов функции mbtowc
. Если mbstowcs
возникает однобайтовый пустой символ ('\0') до или при count
возникновении, он преобразует значение NULL в символ NULL (L'\0'
) и останавливается. Таким образом, строка расширенных символов в параметре wcstr
заканчивается нуль-символом только в том случае, если нуль-символ встречается во время преобразования. Если последовательности, на которые указывают параметры wcstr
и mbstr
, перекрываются, то поведение не определено.
Если аргумент wcstr
имеет значение NULL
, функция mbstowcs
возвращает количество расширенных символов, которые получились бы в результате преобразования, не включающего конечный нуль-символ. Чтобы возвращалось правильное значение, исходная строка должна заканчиваться нуль-символом. Если требуется, чтобы результирующая строка расширенных символов завершалась нуль-символом, добавьте его к возвращаемому значению.
mbstr
Если аргумент имеет значение или >INT_MAX
count
имеет NULL
значение, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, параметр errno
устанавливается в значение EINVAL
и функция возвращает –1.
Функция mbstowcs
использует текущий языковой стандарт для любых аспектов поведения, зависящих от языкового стандарта; функция _mbstowcs_l
идентична за исключением того, что она использует переданный языковой стандарт. Дополнительные сведения см. в разделе Locale.
В C++ эти функции имеют шаблонные перегрузки, которые вызывают более новые и безопасные аналоги этих функций. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Маршрут | Обязательный заголовок |
---|---|
mbstowcs |
<stdlib.h> |
_mbstowcs_l |
<stdlib.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
// crt_mbstowcs.c
// compile with: /W3
// illustrates the behavior of the mbstowcs function
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
int main( void )
{
size_t size;
int nChar = 2; // number of characters to convert
int requiredSize;
unsigned char *pmbnull = NULL;
unsigned char *pmbhello = NULL;
char* localeInfo;
wchar_t *pwchello = L"\x3042\x3043"; // 2 Hiragana characters
wchar_t *pwc;
/* Enable the Japanese locale and codepage */
localeInfo = setlocale(LC_ALL, "Japanese_Japan.932");
printf("Locale information set to %s\n", localeInfo);
printf( "Convert to multibyte string:\n" );
requiredSize = wcstombs( NULL, pwchello, 0); // C4996
// Note: wcstombs is deprecated; consider using wcstombs_s
printf(" Required Size: %d\n", requiredSize);
/* Add one to leave room for the null terminator. */
pmbhello = (unsigned char *)malloc( requiredSize + 1);
if (! pmbhello)
{
printf("Memory allocation failure.\n");
return 1;
}
size = wcstombs( pmbhello, pwchello, requiredSize + 1); // C4996
// Note: wcstombs is deprecated; consider using wcstombs_s
if (size == (size_t) (-1))
{
printf("Couldn't convert string. Code page 932 may"
" not be available.\n");
return 1;
}
printf( " Number of bytes written to multibyte string: %u\n",
(unsigned int) size );
printf( " Hex values of the" );
printf( " multibyte characters: %#.2x %#.2x %#.2x %#.2x\n",
pmbhello[0], pmbhello[1], pmbhello[2], pmbhello[3] );
printf( " Codepage 932 uses 0x81 to 0x9f as lead bytes.\n\n");
printf( "Convert back to wide-character string:\n" );
/* Assume we don't know the length of the multibyte string.
Get the required size in characters, and allocate enough space. */
requiredSize = mbstowcs(NULL, pmbhello, 0); // C4996
/* Add one to leave room for the null terminator */
pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));
if (! pwc)
{
printf("Memory allocation failure.\n");
return 1;
}
size = mbstowcs( pwc, pmbhello, requiredSize + 1); // C4996
if (size == (size_t) (-1))
{
printf("Couldn't convert string--invalid multibyte character.\n");
}
printf( " Characters converted: %u\n", (unsigned int)size );
printf( " Hex value of first 2" );
printf( " wide characters: %#.4x %#.4x\n\n", pwc[0], pwc[1] );
free(pwc);
free(pmbhello);
}
Locale information set to Japanese_Japan.932
Convert to multibyte string:
Required Size: 4
Number of bytes written to multibyte string: 4
Hex values of the multibyte characters: 0x82 0xa0 0x82 0xa1
Codepage 932 uses 0x81 to 0x9f as lead bytes.
Convert back to wide-character string:
Characters converted: 2
Hex value of first 2 wide characters: 0x3042 0x3043
Преобразование данных
Локаль
Интерпретация последовательностей многобайтовых символов
_mbclen
, , mblen
_mblen_l
mbtowc
, _mbtowc_l
wcstombs
, _wcstombs_l
wctomb
, _wctomb_l
MultiByteToWideChar