Преобразовать строку широких символов в строку многобайтовых символов
#include <stdlib.h>size_t wcstombs( char *s,const wchar_t *pwcs,size_t n );
libc
Функция wcstombs() преобразует последовательность кодов широких символов из массива, переданного в аргументе pwcs, в последовательность многобайтовых символов, и сохраняет их в массив, переданный в s. Функция останавливается, как только новый многобайтовый символ превышает предел n общего количества байт, или если встретился NUL
символ. Может быть преобразовано не более чем n байт массива, указанного в s.
Функция wcsrtombs() является перезапускаемой версией wcstombs().
Количество измененных элементов массива, не включая завершающий символ нуля, при его наличии, или (size_t
)-1
, если встретился недопустимый многобайтовый символ.
#include <stdio.h>#include <stdlib.h>wchar_t wbuffer[] = {0x0073,0x0074,0x0072,0x0069,0x006e,0x0067,0x0000};int main( void ){char mbsbuffer[50];int i, len;len = wcstombs( mbsbuffer, wbuffer, 50 );if ( len != -1 ){for ( i = 0; i < len; i++ )printf( "/%4.4x", wbuffer[i] );printf( "\n" );mbsbuffer[len] = '\0';printf( "%s(%d)\n", mbsbuffer, len );}return (EXIT_SUCCESS);}
Код генерирует следующий вывод:
$ ./a.out /0073/0074/0072/0069/006e/0067 string(6)
ANSI, POSIX 1003.1
mblen(), mbtowc(), mbstowcs(), wcsrtombs(), wctomb()
Предыдущий раздел: Описание API системной библиотеки