wcrtomb_s
Przekonwertuj znak szeroki na reprezentację znaków wielobajtowych. Wersja z ulepszeniami zabezpieczeń wcrtomb
zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
errno_t wcrtomb_s(
size_t *pReturnValue,
char *mbchar,
size_t sizeOfmbchar,
wchar_t *wchar,
mbstate_t *mbstate
);
template <size_t size>
errno_t wcrtomb_s(
size_t *pReturnValue,
char (&mbchar)[size],
wchar_t *wchar,
mbstate_t *mbstate
); // C++ only
Parametry
pReturnValue
Zwraca liczbę bajtów zapisanych lub -1, jeśli wystąpił błąd.
mbchar
Wynikowy znak wielobajtowy przekonwertowany.
sizeOfmbchar
Rozmiar zmiennej mbchar
w bajtach.
wchar
Szeroki znak do konwersji.
mbstate
Wskaźnik do mbstate_t
obiektu.
Wartość zwracana
Zwraca wartość zero lub errno
wartość, jeśli wystąpi błąd.
Uwagi
Funkcja wcrtomb_s
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ść pReturnValue
będzie liczbą przekonwertowanych bajtów, ale nie więcej niż MB_CUR_MAX
bajty lub -1, jeśli wystąpił błąd.
Jeśli mbstate
ma wartość null, używany jest stan konwersji wewnętrznej mbstate_t
. Jeśli znak zawarty w obiekcie wchar
nie ma odpowiedniego znaku wielobajtowego, wartość pReturnValue
to -1, a funkcja zwraca errno
wartość EILSEQ
.
Funkcja wcrtomb_s
różni się od wctomb_s
funkcji , _wctomb_s_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 wcslen
, jeśli kolejne wywołanie wcsrtombs_s
zostało użyte zamiast wcstombs_s
.
W języku C++używanie tej funkcji jest uproszczone przez przeciążenia szablonu; przeciążenia mogą automatycznie wnioskować długość buforu (eliminując konieczność określenia argumentu rozmiaru) i mogą automatycznie zastępować starsze, niezabezpieczone funkcje nowszymi, bezpiecznymi odpowiednikami. 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_s
Funkcja jest bezpieczna wielowątkowość, o ile nie ma funkcji w bieżących wywołaniach setlocale
wątku, gdy ta funkcja jest wykonywana, a mbstate
parametr ma wartość null.
Przykład
// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
errno_t returnValue;
size_t pReturnValue;
mbstate_t mbstate;
size_t sizeOfmbStr = 1;
char mbchar = 0;
wchar_t* wchar = L"Q\0";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
*wchar, &mbstate);
if (returnValue == 0) {
printf("The corresponding wide character \"");
wprintf(L"%s\"", wchar);
printf(" was converted to a the \"%c\" ", mbchar);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
The corresponding wide character "Q" was converted to a the "Q" multibyte character.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
wcrtomb_s |
<wchar.h> |
Zobacz też
Konwersja danych
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
mbsinit