mbsrtowcs
Konwertuje ciąg znaków wielobajtowych w bieżących ustawieniach regionalnych na odpowiedni ciąg znaków szeroki, z możliwością ponownego uruchomienia w środku znaku wielobajtowego. Dostępna jest bezpieczniejsza wersja tej funkcji; zobacz mbsrtowcs_s
.
Składnia
size_t mbsrtowcs(
wchar_t *wcstr,
const char **mbstr,
sizeof count,
mbstate_t *mbstate
);
template <size_t size>
size_t mbsrtowcs(
wchar_t (&wcstr)[size],
const char **mbstr,
sizeof count,
mbstate_t *mbstate
); // C++ only
Parametry
wcstr
Adres do przechowywania wynikowego przekonwertowanego ciągu znaków szerokiego.
mbstr
Wskaźnik pośredni do lokalizacji ciągu znaków wielobajtowych do konwersji.
count
Maksymalna liczba znaków (nie bajtów) do konwersji i przechowywania w pliku wcstr
.
mbstate
Wskaźnik do mbstate_t
obiektu stanu konwersji. Jeśli ta wartość jest wskaźnikiem o wartości null, używany jest statyczny obiekt stanu konwersji wewnętrznej. Ponieważ obiekt wewnętrzny mbstate_t
nie jest bezpieczny wątkowo, zalecamy, aby zawsze przekazywać własny mbstate
parametr.
Wartość zwracana
Zwraca liczbę znaków, które zostały pomyślnie przekonwertowane, a nie łącznie z znakiem null zakończenia, jeśli istnieje. Zwraca wartość (size_t)(-1) w przypadku wystąpienia błędu i ustawia wartość errno
EILSEQ
.
Uwagi
Funkcja mbsrtowcs
konwertuje ciąg znaków wielobajtowych pośrednio wskazywanych przez mbstr
, na znaki szerokie przechowywane w buforze wskazywanym przez wcstr
element przy użyciu stanu konwersji zawartego w mbstate
obiekcie . Konwersja jest kontynuowana dla każdego znaku, dopóki nie zostanie napotkany znak wielobajtowy o wartości null, sekwencja wielobajtowa, która nie odpowiada prawidłowemu znakowi w bieżących ustawieniach regionalnych lub dopóki count
znaki nie zostały przekonwertowane. W przypadku mbsrtowcs
napotkania wielobajtowego znaku null ('\0') przed lub w count
czasie, konwertuje go na 16-bitowy znak null i zatrzymuje.
W związku z tym ciąg znaków szeroki w wcstr
obiekcie jest zakończony wartością null tylko w przypadku mbsrtowcs
napotkania wielobajtowego znaku null podczas konwersji. Jeśli sekwencje wskazywane przez mbstr
i wcstr
nakładają się na siebie, zachowanie mbsrtowcs
jest niezdefiniowane. mbsrtowcs
ma to wpływ na kategorię LC_TYPE
bieżących ustawień regionalnych.
Funkcja mbsrtowcs
różni się od mbstowcs
funkcji , _mbstowcs_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 powinna używać mbsrlen
zamiast mbslen
, jeśli kolejne wywołanie mbsrtowcs
metody jest używane zamiast mbstowcs
.
Jeśli wcstr
nie jest wskaźnikiem o wartości null, obiekt wskaźnika wskazywany przez mbstr
element ma przypisany wskaźnik o wartości null, jeśli konwersja została zatrzymana, ponieważ osiągnięto znak null zakończenia. W przeciwnym razie zostanie przypisany adres tuż obok ostatniego przekonwertowanego znaku wielobajtowego, jeśli istnieje. Umożliwia to kolejne wywołanie funkcji w celu ponownego uruchomienia konwersji, w której zatrzymano to wywołanie.
wcstr
Jeśli argument jest wskaźnikiem o wartości null, count
argument jest ignorowany i mbsrtowcs
zwraca wymagany rozmiar w szerokich znakach dla ciągu docelowego. Jeśli mbstate
jest wskaźnikiem o wartości null, funkcja używa niezwiązanego z wątkiem obiektu statycznego stanu konwersji wewnętrznej mbstate_t
. Jeśli sekwencja mbstr
znaków nie ma odpowiedniej reprezentacji znaków wielobajtowych, zwracana jest wartość -1 i errno
jest ustawiona na EILSEQ
wartość .
Jeśli mbstr
jest wskaźnikiem o wartości null, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonanie może kontynuować, ta funkcja ustawia errno
EINVAL
wartość i zwraca wartość -1.
W języku C++ta funkcja ma przeciążenie szablonu, które wywołuje nowszy, bezpieczny odpowiednik 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
mbsrtowcs
Funkcja jest bezpieczna wielowątkowość, o ile funkcja w bieżącym wątku nie wywołuje setlocale
tak długo, jak ta funkcja jest wykonywana, a mbstate
argument nie jest wskaźnikiem null.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
mbsrtowcs |
<wchar.h> |
Zobacz też
Konwersja danych
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
mbrtowc
mbtowc
, _mbtowc_l
mbstowcs
, _mbstowcs_l
mbsinit