mbtowc
|
Défini dans l'en-tête
<stdlib.h>
|
||
|
int
mbtowc
(
wchar_t
*
pwc,
const
char
*
s,
size_t
n
)
|
(jusqu'à C99) | |
|
int
mbtowc
(
wchar_t
*
restrict
pwc,
const
char
*
restrict
s,
size_t
n
)
|
(depuis C99) | |
Convertit un caractère multioctet dont le premier octet est pointé par s en un caractère large, écrit dans * pwc si pwc n'est pas nul.
Si s est un pointeur nul, réinitialise l'état de conversion global et détermine si les séquences de décalage sont utilisées.
Table des matières |
Notes
Chaque appel à
mbtowc
met à jour l'état de conversion global interne (un objet statique de type
mbstate_t
, connu uniquement de cette fonction). Si l'encodage multioctet utilise des états de changement, il faut veiller à éviter les retours en arrière ou les analyses multiples. Dans tous les cas, plusieurs threads ne devraient pas appeler
mbtowc
sans synchronisation :
mbrtowc
peut être utilisé à la place.
Paramètres
| pwc | - | pointeur vers le caractère large pour la sortie |
| s | - | pointeur vers le caractère multioctet |
| n | - | limite du nombre d'octets dans s pouvant être examinés |
Valeur de retour
Si s n'est pas un pointeur nul, retourne le nombre d'octets contenus dans le caractère multioctet ou - 1 si les premiers octets pointés par s ne forment pas un caractère multioctet valide ou 0 si s pointe vers le caractère nul ' \0 ' .
Si s est un pointeur nul, réinitialise son état de conversion interne pour représenter l'état de décalage initial et retourne 0 si l'encodage multioctet actuel n'est pas dépendant de l'état (n'utilise pas de séquences de décalage) ou une valeur non nulle si l'encodage multioctet actuel est dépendant de l'état (utilise des séquences de décalage).
Exemple
#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wchar.h> // print multibyte string to wide-oriented stdout // equivalent to wprintf(L"%s\n", ptr); void print_mb(const char* ptr) { mbtowc(NULL, NULL, 0); // reset the conversion state const char* end = ptr + strlen(ptr); int ret = 0; for (wchar_t wc; (ret = mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret) wprintf(L"%lc", wc); wprintf(L"\n"); } int main(void) { setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding print_mb("z\u00df\u6c34\U0001F34C"); // or "zß水🍌" }
Sortie :
zß水🍌
Références
- Norme C23 (ISO/IEC 9899:2024) :
-
- 7.24.7.2 La fonction mbtowc (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.22.7.2 La fonction mbtowc (p: 260)
- Norme C11 (ISO/IEC 9899:2011):
-
- 7.22.7.2 La fonction mbtowc (p: 358)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.20.7.2 La fonction mbtowc (p: 322)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 4.10.7.2 La fonction mbtowc
Voir aussi
|
(C95)
|
convertit le caractère multioctet suivant en caractère large, en fonction de l'état
(fonction) |
|
retourne le nombre d'octets dans le prochain caractère multioctet
(fonction) |
|
|
Documentation C++
pour
mbtowc
|
|