wcrtomb - konwertuje szerokie znaki na sekwencje wielobajtowe
Standardowa biblioteka C (
libc,
-lc)
#include <wchar.h>
size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps);
Podstawowym zastosowaniem tej funkcji jest przypadek, gdy
s nie jest NULL
i
wc nie jest szerokim znakiem null (L'\0'). Wtedy funkcja
wcrtomb() konwertuje szeroki znak
wc na jego wielobajtową
reprezentację i zachowuje ją na początku tablicy
znakowej, wskazywanej przez
s. Aktualizuje stan przesunięcia
*ps i zwraca długość reprezentacji wielobajtowej,
tj. liczbę bitów zapisanych do
s.
Innym przypadkiem jest sytuacja, gdy
s również nie jest
NULL, lecz
wc jest szerokim znakiem null (L'\0'). Wtedy funkcja
wcrtomb() zachowuje w
s sekwencję przesunięcia
wymaganą do przeniesienia
*ps z powrotem do stanu
początkowego, a za tą sekwencją doklejony będzie
bajt '\0'. Aktualizuje stan przesunięcia
*ps (tj. przenosi go do
stanu początkowego) i zwraca długość sekwencji
przesunięcia plus jeden, tj. liczbę bajtów zapisanych do
s.
Trzecim przypadek to
s równe NULL. Wtedy
wc jest
ignorowane, a funkcja zwraca
wcrtomb(buf, L'\0', ps)
gdzie
buf jest wewnętrznym anonimowym buforem.
We wszystkich powyższych przypadkach, jeśli
ps jest NULL,
to w jego miejscu używany jest anonimowy stan, znany tylko funkcji
wcrtomb().
Funkcja
wcrtomb() zwraca liczbę bajtów, które
zostały (lub zostałyby) zapisane do tablicy bajtowej
s.
Jeśli
wc nie może być reprezentowane w sekwencji
wielobajtowej (według bieżących ustawień
regionalnych), zwracane jest
(size_t) -1 i
errno jest
ustawiane na
EILSEQ.
Informacje o pojęciach używanych w tym rozdziale można
znaleźć w podręczniku
attributes(7).
Interfejs |
Atrybut |
Wartość |
wcrtomb() |
Bezpieczeństwo wątkowe |
MT-Unsafe race:wcrtomb/!ps |
POSIX.1-2001, POSIX.1-2008, C99.
Zachowanie
wcrtomb() zależy od kategorii
LC_CTYPE
bieżących ustawień regionalnych.
Podawanie NULL jako
ps nie jest bezpieczne dla wątków.
mbsinit(3),
wcsrtombs(3)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Przemek Borys <
[email protected]>, Robert Luberda
<
[email protected]> i Michał Kułach
<
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]