mbrlen
|
Défini dans l'en-tête
<wchar.h>
|
||
|
(depuis C95)
(jusqu'à C99) |
||
| (depuis C99) | ||
Détermine la taille, en octets, de la représentation d'un caractère multioctet.
Cette fonction est équivalente à l'appel mbrtowc ( NULL , s, n, ps ? ps : & internal ) pour un objet caché internal de type mbstate_t , sauf que l'expression ps n'est évaluée qu'une seule fois.
Table des matières |
Paramètres
| s | - | pointeur vers un élément d'une chaîne de caractères multioctets |
| n | - | limite du nombre d'octets dans s pouvant être examinés |
| ps | - | pointeur vers la variable contenant l'état de conversion |
Valeur de retour
Le premier des éléments suivants qui s'applique :
- 0 si les n octets suivants ou moins complètent le caractère nul ou si s est un pointeur nul. Les deux cas réinitialisent l'état de conversion.
- le nombre d'octets [ 1 ... n ] qui complètent un caractère multioctet valide
- ( size_t ) - 2 si les n octets suivants font partie d'un caractère multioctet potentiellement valide, qui reste incomplet après examen des n octets
- ( size_t ) - 1 si une erreur d'encodage se produit. La valeur de errno est EILSEQ ; l'état de conversion n'est pas spécifié.
Exemple
#include <locale.h> #include <stdio.h> #include <string.h> #include <wchar.h> int main(void) { // allow mbrlen() to work with UTF-8 multibyte encoding setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const char* str = "水"; size_t sz = strlen(str); mbstate_t mb; memset(&mb, 0, sizeof mb); int len1 = mbrlen(str, 1, &mb); if (len1 == -2) printf("The first 1 byte of %s is an incomplete multibyte char" " (mbrlen returns -2)\n", str); int len2 = mbrlen(str + 1, sz - 1, &mb); printf("The remaining %zu bytes of %s hold %d bytes of the multibyte" " character\n", sz - 1, str, len2); printf("Attempting to call mbrlen() in the middle of %s while in initial" " shift state returns %zd\n", str, mbrlen(str + 1, sz - 1, &mb)); }
Sortie :
The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2) The remaining 2 bytes of 水 hold 2 bytes of the multibyte character Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1
Références
- Norme C23 (ISO/IEC 9899:2024) :
-
- 7.29.6.3.1 La fonction mbrlen (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.29.6.3.1 La fonction mbrlen (p: TBD)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.29.6.3.1 La fonction mbrlen (p: 442)
- Norme C99 (ISO/IEC 9899:1999) :
-
- 7.24.6.3.1 La fonction mbrlen (p: 388)
Voir aussi
|
(C95)
|
convertit le caractère multioctet suivant en caractère large, en tenant compte de l'état
(fonction) |
|
retourne le nombre d'octets dans le prochain caractère multioctet
(fonction) |
|
|
Documentation C++
pour
mbrlen
|
|