Partager via


mbrlen

Déterminer le nombre d'octets requis pour terminer un caractère multioctet dans les paramètres régionaux actuels, avec la capacité de redémarrer au milieu d'un caractère multioctet.

size_t mbrlen(    const char * str,    size_t count,    mbstate_t * mbstate );

Paramètres

  • str
    Pointeur vers l'octet suivant à examiner dans une chaîne de caractères multioctets.

  • count
    Nombre maximal d'octets à examiner.

  • mbstate
    Pointeur vers l'état du décalage actuel de l'octet initial de str.

Valeur de retour

Une des valeurs suivantes :

  • 0
    Les count (ou moins) octets suivants terminent le caractère multioctet qui représente le caractère null large.

  • 1 à count, inclusivement
    Les count (ou moins) octets suivants terminent un caractère multioctet valide. La valeur retournée est le nombre d'octets qui terminent le caractère multioctet.

  • (size_t)(-2)
    Les count octets suivants contribuent à un caractère multioctets incomplet mais potentiellement valide, et tous les count octets ont été traités.

  • (size_t)(-1)
    Une erreur d'encodage s'est produite. Les count (ou moins) octets suivants ne contribuent pas à un caractère multioctet complet et valide. Dans ce cas, errno est défini à EILSEQ et l'état de la conversion dans mbstate n'est pas spécifié.

Notes

La fonction mbrlen examine au plus count octets à partir de l'octet pointé par str pour déterminer le nombre d'octets qui sont nécessaires pour terminer le caractère multioctet suivant, y compris les séquences de décalage. EIle est équivalente à l'appel de mbrtowc(NULL, str, count, &mbstate), où mbstate est un objet mbstate_t fourni par l'utilisateur ou un objet interne statique fourni par la bibliothèque.

La fonction mbrlen enregistre et utilise l'état du décalage d'un caractère multioctet incomplet dans le paramètre mbstate. Ceci donne à mbrlen la capacité à redémarrer si nécessaire au milieu d'un caractère multioctet, en examinant au plus count octets. Si mbstate est un pointeur null, mbrlen utilise un objet mbstate_t statique interne pour stocker l'état du décalage. Comme l'objet mbstate_t interne n'est pas thread-safe, nous vous recommandons de toujours allouer et de passer votre propre paramètre mbstate.

La fonction mbrlen diffère de _mbclen, mblen, _mblen_l par sa capacité à redémarrer. L'état du décalage est stocké dans mbstate pour les appels suivants à la même ou à d'autres fonctions redémarrables. Les résultats ne sont pas définis quand l'utilisation de fonctions redémarrables est combinée avec l'utilisation de fonctions non redémarrables. Par exemple, une application doit utiliser wcsrlen au lieu de wcslen, si un appel ultérieur à wcsrtombs est utilisé à la place de wcstombs.

Mappages de routines de texte générique

Routine TCHAR.H

_UNICODE et _MBCS non définis

_MBCS défini

_UNICODE défini

non applicable

non applicable

mbrlen

non applicable

Configuration requise

Routine

En-tête requis

mbrlen

<wchar.h>

Pour plus d'informations sur la compatibilité, voir Compatibilité dans l'introduction.

Exemple

Cet exemple montre comment l'interprétation des caractères multioctets dépend de la page de codes actuelle et montre la capacité de reprise de mbrlen.

 // crt_mbrlen.c
// Compile by using: cl crt_mbrlen.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>

size_t Example(const char * pStr)
{
    size_t      charLen = 0;
    size_t      charCount = 0;
    mbstate_t   mbState = {0};

    while ((charLen = mbrlen(pStr++, 1, &mbState)) != 0 &&
            charLen != (size_t)-1)
    {
        if (charLen != (size_t)-2) // if complete mbcs char,
        {
            charCount++;
        }
    } 
    return (charCount);
} 

int main( void )
{
    int         cp;
    size_t      charCount = 0;
    const char  *pSample = 
        "\x82\xD0\x82\xE7\x82\xAA\x82\xC8: Shift-jis hiragana.";

    cp = _getmbcp();
    charCount = Example(pSample);
    printf("\nCode page: %d\n%s\nCharacter count: %d\n", 
        cp, pSample, charCount);
    
    setlocale(LC_ALL, "ja-JP"); // Set Japanese locale
    _setmbcp(932); // and Japanese multibyte code page
    cp = _getmbcp();
    charCount = Example(pSample);
    printf("\nCode page: %d\n%s\nCharacter count: %d\n", 
        cp, pSample, charCount);
}
          

Équivalent .NET Framework

System::String::Length

Voir aussi

Référence

Manipulation de chaînes (CRT)

Paramètres régionaux