Рекомендуем использовать Visual Studio 2017

wcstombs, _wcstombs_l

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

Преобразует последовательность расширенных символов в соответствующую последовательность многобайтовых символов. Доступны более безопасные версии этих функций; в разделе wcstombs_s _wcstombs_s_l.

size_t wcstombs(  
   char *mbstr,  
   const wchar_t *wcstr,  
   size_t count   
);  
size_t _wcstombs_l(  
   char *mbstr,  
   const wchar_t *wcstr,  
   size_t count,  
   _locale_t locale  
);  
template <size_t size>  
size_t wcstombs(  
   char (&mbstr)[size],  
   const wchar_t *wcstr,  
   size_t count   
); // C++ only  
template <size_t size>  
size_t _wcstombs_l(  
   char (&mbstr)[size],  
   const wchar_t *wcstr,  
   size_t count,  
   _locale_t locale  
); // C++ only  

Параметры

mbstr
Адрес последовательности многобайтовых символов.

wcstr
Адрес последовательности расширенных символов.

count
Максимальное количество байтов, которые могут храниться в выходной строке многобайтовых символов.

locale
Используемый языковой стандарт.

Если функция wcstombs успешно преобразовывает строку многобайтовых символов, она возвращает число байтов, записанных в выходную строку многобайтовых символов, исключая конечный символ NULL (при его наличии). Если аргумент mbstr равен NULL, функция wcstombs возвращает необходимый размер строки назначения в байтах. Если функция wcstombs встречает расширенный символ, который она не может преобразовать в многобайтовый символ, возвращается значение –1, приведенное к типу size_t, и для параметра errno задается значение EILSEQ.

Функция wcstombs преобразовывает строку расширенных символов, на которую указывает параметр wcstr, в соответствующие многобайтовые символы и сохраняет результаты в массиве mbstr. Параметр count указывает максимальное число байтов, которые могут храниться в выходной строке многобайтовых символов (т. е., размер mbstr). Как правило, количество байтов, необходимое для преобразования строки расширенных символов, неизвестно. Для некоторых расширенных символов требуется только один байт в выходной строке; для других требуется два байта. Если в выходной строке многобайтовых символов предусмотреть по два байта на каждый расширенный символ из входной строки (включая расширенный символ NULL), то результат гарантированно поместится.

Если функция wcstombs встречает расширенный нуль-символ (L"\0") перед или после count символов, она преобразовывает его в 8-битный 0 и останавливается. Таким образом, строка многобайтовых символов mbstr завершается нуль-символом только в том случае, если функция wcstombs встречает расширенный нуль-символ во время преобразования. Если последовательности, на которые указывают параметры wcstr и mbstr, перекрываются, то поведение wcstombs не определено.

Если аргумент mbstr равен NULL, функция wcstombs возвращает необходимый размер строки назначения в байтах.

wcstombsпроверяет свои параметры. Если wcstrNULL, или если count больше, чемINT_MAX, эта функция вызывает обработчик недопустимого параметра, как описано в проверки параметров . Если выполнение может быть продолжено, функция устанавливает параметр errno в значение EINVAL и возвращает –1.

wcstombsиспользует текущий языковой стандарт для любого поведения, зависящего от языкового стандарта; _wcstombs_l идентична за исключением того, что она использует переданный языковой стандарт. Для получения дополнительной информации см. Locale.

В C++ эти функции имеют шаблонные перегрузки, которые вызывают более новые и безопасные аналоги этих функций. Дополнительные сведения см. в разделе Secure Template Overloads.

ПодпрограммаОбязательный заголовок
wcstombs<stdlib.h>
_wcstombs_l<stdlib.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Эта программа иллюстрирует поведение wcstombs функции.

// crt_wcstombs.c  
// compile with: /W3  
// This example demonstrates the use  
// of wcstombs, which converts a string  
// of wide characters to a string of   
// multibyte characters.  
  
#include <stdlib.h>  
#include <stdio.h>  
  
#define BUFFER_SIZE 100  
  
int main( void )  
{  
    size_t  count;  
    char    *pMBBuffer = (char *)malloc( BUFFER_SIZE );  
    wchar_t *pWCBuffer = L"Hello, world.";  
  
    printf("Convert wide-character string:\n" );  
  
    count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996  
    // Note: wcstombs is deprecated; consider using wcstombs_s instead  
    printf("   Characters converted: %u\n",  
            count );  
    printf("    Multibyte character: %s\n\n",  
           pMBBuffer );  
  
    free(pMBBuffer);  
}  

Convert wide-character string:  
   Characters converted: 13  
    Multibyte character: Hello, world.  

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызова неуправляемого кода.

Преобразование данных
Языковой стандарт
_mbclen mblen, _mblen_l
mbstowcs _mbstowcs_l
mbtowc _mbtowc_l
wctomb _wctomb_l
WideCharToMultiByte

Показ: