Condividi tramite


mbrlen

Determina il numero di byte necessari per completare un carattere multibyte nelle impostazioni locali correnti, con la possibilità di ricominciare nel mezzo di un carattere multibyte.

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

Parametri

  • str
    Puntatore al byte successivo da controllare in una stringa di caratteri multibyte.

  • count
    Numero massimo di byte da controllare.

  • mbstate
    Puntatore allo stato di spostamento corrente del byte iniziale di str.

Valore restituito

Uno dei valori seguenti:

  • 0
    I successivi count byte o un numero inferiore completano il carattere multibyte che rappresenta il carattere wide Null.

  • Da 1 a count incluso
    I successivi count byte o un numero inferiore completano un carattere multibyte valido. Il valore restituito è il numero di byte che completa il carattere multibyte.

  • (size_t)(-2)
    I successivi count byte contribuiscono a un carattere multibyte incompleto ma potenzialmente valido e tutti i count byte sono stati elaborati.

  • (size_t)(-1)
    Si è verificato un errore di codifica. I successivi count byte o un numero inferiore non contribuiscono a un carattere multibyte valido e completo. In tal caso, errno viene impostato su EILSEQ e non viene specificato lo stato di conversione in mbstate.

Note

La funzione mbrlen controlla al massimo count byte a partire dal byte a cui punta str per determinare il numero di byte necessari per completare il carattere multibyte successivo, comprese tutte le sequenze di spostamento. Equivale a chiamare mbrtowc(NULL, str, count, &mbstate) dove mbstate è un oggetto mbstate_t fornito dall'utente o un oggetto interno statico fornito dalla libreria.

La funzione mbrlen salva e usa lo stato di spostamento di un carattere multibyte incompleto nel parametro mbstate. Ciò consente a mbrlen di ricominciare nel mezzo di un carattere multibyte se fosse necessario, esaminando al massimo count byte. Se mbstate è un puntatore Null, mbrlen usa un oggetto mbstate_t interno statico per archiviare lo stato di spostamento. Poiché l'oggetto mbstate_t interno non è thread-safe, è consigliabile allocare e passare sempre un parametro mbstate fornito dall'utente.

La funzione mbrlen differisce da _mbclen, mblen, _mblen_l per la possibilità di essere riavviata. Lo stato di spostamento viene archiviato in mbstate per le chiamate successive alle stesse o ad altre funzioni riavviabili. I risultati non sono definiti quando si usano insieme funzioni riavviabili e non riavviabili. Ad esempio, un'applicazione deve usare wcsrlen anziché wcslen se viene usata una chiamata successiva a wcsrtombs anziché wcstombs.

Mapping di routine di testo generico

Routine TCHAR.H

_UNICODE e _MBCS non definiti

_MBCS definito

_UNICODE definito

non applicabile

non applicabile

mbrlen

non applicabile

Requisiti

Routine

Intestazione obbligatoria

mbrlen

<wchar.h>

Per altre informazioni sulla compatibilità, vedere la sezione Compatibilità nell'introduzione.

Esempio

Questo esempio mostra come l'interpretazione dei caratteri multibyte dipende dalla tabella codici corrente e illustra la possibilità di ripresa di 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);
}
          

Equivalente .NET Framework

System::String::Length

Vedere anche

Riferimenti

Modifica di stringhe (CRT)

Impostazioni locali