wcrtomb
Przekonwertuj znak szeroki na reprezentację znaków wielobajtowych. Dostępna jest bezpieczniejsza wersja tej funkcji; zobacz wcrtomb_s
.
Składnia
size_t wcrtomb(
char *mbchar,
wchar_t wchar,
mbstate_t *mbstate
);
template <size_t size>
size_t wcrtomb(
char (&mbchar)[size],
wchar_t wchar,
mbstate_t *mbstate
); // C++ only
Parametry
mbchar
Wynikowy znak wielobajtowy przekonwertowany.
wchar
Szeroki znak do konwersji.
mbstate
Wskaźnik do mbstate_t
obiektu.
Wartość zwracana
Zwraca liczbę bajtów wymaganych do reprezentowania przekonwertowanego znaku wielobajtowego, w przeciwnym razie wartość -1, jeśli wystąpi błąd.
Uwagi
Funkcja wcrtomb
konwertuje szeroki znak, zaczynając od określonego stanu konwersji zawartego w , z wartości zawartej w wchar
mbstate
, na adres reprezentowany przez mbchar
. Wartość zwracana jest liczbą bajtów wymaganych do reprezentowania odpowiadającego mu znaku wielobajtowego, ale nie zwróci więcej niż MB_CUR_MAX
bajtów.
Jeśli mbstate
ma wartość null, używany jest wewnętrzny mbstate_t
obiekt zawierający stan konwersji mbchar
elementu . Jeśli sekwencja wchar
znaków nie ma odpowiedniej reprezentacji znaków wielobajtowych, zwracana jest wartość -1, a errno
parametr jest ustawiony na EILSEQ
wartość .
Funkcja wcrtomb
różni się od wctomb
funkcji , _wctomb_l
dzięki możliwości ponownego uruchamiania. Stan konwersji jest przechowywany dla mbstate
kolejnych wywołań do tych samych lub innych funkcji możliwych do ponownego uruchomienia. Wyniki są niezdefiniowane podczas mieszania funkcji możliwych do ponownego uruchomienia i niezwiązanych z uruchamianiem. Na przykład aplikacja będzie używać wcsrlen
zamiast wcsnlen
, jeśli kolejne wywołanie wcsrtombs
zostało użyte zamiast wcstombs
.
W języku C++ta funkcja ma przeciążenie szablonu, które wywołuje nowsze, bezpieczne odpowiedniki tej funkcji. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wyjątki
wcrtomb
Funkcja jest bezpieczna wielowątkowość, o ile nie ma funkcji w bieżących wywołaniach setlocale
wątku podczas wykonywania tej funkcji i gdy mbstate
parametr ma wartość null.
Przykład
// crt_wcrtomb.c
// compile with: /W3
// This program converts a wide character
// to its corresponding multibyte character.
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
size_t sizeOfCovertion = 0;
mbstate_t mbstate;
char mbStr = 0;
wchar_t* wcStr = L"Q";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
sizeOfCovertion = wcrtomb(&mbStr, *wcStr, &mbstate); // C4996
// Note: wcrtomb is deprecated; consider using wcrtomb_s instead
if (sizeOfCovertion > 0)
{
printf("The corresponding wide character \"");
wprintf(L"%s\"", wcStr);
printf(" was converted to the \"%c\" ", mbStr);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
The corresponding wide character "Q" was converted to the "Q" multibyte character.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
wcrtomb |
<wchar.h> |
Zobacz też
Konwersja danych
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
mbsinit