Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Bestimmen der Anzahl der Bytes, die zum Ausführen eines Multibytezeichens im aktuellen Gebietsschemas erforderlich sind, mit der Möglichkeit des Neustarts in der Mitte eines Multibytezeichens.
Syntax
size_t mbrlen(
const char * str,
size_t count,
mbstate_t * mbstate
);
Parameter
str
Zeiger auf das nächste Byte, das in einer Multibytezeichenfolge überprüft werden soll.
count
Die maximale Anzahl der zu überprüfenden Bytes.
mbstate
Zeiger auf den aktuellen Umschaltzustand des ersten Bytes von str.
Rückgabewert
Einer der folgenden Werte:
| Wert | Beschreibung |
|---|---|
| 0 | Die nächsten count oder weniger Bytes schließen das Multibytezeichen ab, das Null-Breitzeichen darstellt. |
1 bis count, inklusive |
Die nächsten count oder weniger Bytes schließen ein gültiges Multibytezeichen ab. Der zurückgegebene Wert ist die Anzahl der Bytes, die das Multybytezeichen abschließen. |
| (size_t)(-2) | Die nächsten count Bytes tragen zu einem unvollständigen, jedoch möglicherweise gültigen Multibytezeichen bei und alle count Bytes wurden verarbeitet. |
| (size_t)(-1) | Es ist ein Codierungsfehler aufgetreten. Die nächsten count oder weniger Bytes tragen nicht zu einem vollständigen und gültigen Multibytezeichen bei. In diesem Fall wird errno auf EILSEQ festgelegt, und der Konvertierungszustand in mbstate ist nicht angegeben. |
Hinweise
Die mbrlen-Funktion prüft höchstens count Bytes, beginnend mit dem Byte, auf das von str gezeigt wird, um die Anzahl von Bytes zu bestimmen, die zum Abschließen des nächsten Multibytezeichens, einschließlich aller Umwandlungssequenzen, erforderlich sind. Es entspricht dem Aufruf mbrtowc(NULL, str, count, &mbstate) , bei dem mbstate es sich entweder um ein vom Benutzer bereitgestelltes mbstate_t Objekt oder um ein statisches internes Objekt handelt, das von der Bibliothek bereitgestellt wird.
Die mbrlen-Funktion speichert und verwendet Umschaltzustand eines unvollständigen Multibytezeichens im mbstate-Parameter. Aus diesem Grund kann **mbrlen**bei Bedarf in der Mitte eines Multibyte-Zeichens neu gestartet werden und die meisten count Bytes untersuchen. Wenn mbstate ein NULL-Zeiger ist, verwendet mbrlen ein internes, statisches mbstate_t-Objekt zum Speichern des Umschaltzustands. Da das interne mbstate_t Objekt nicht threadsicher ist, empfehlen wir, dass Sie immer Ihren eigenen mbstate Parameter zuordnen und übergeben.
Die mbrlen Funktion unterscheidet sich von _mbclen, mblen_mblen_l durch die Neustartbarkeit. Der Umschaltzustand wird für nachfolgende Aufrufe der gleichen oder anderer Funktionen, die neu gestartet werden können, in mbstate gespeichert. Wenn sowohl Funktionen, die neu gestartet werden können, als auch Funktionen, die nicht neu gestartet werden könnnen, verwendet werden, sind die Ergebnisse undefiniert. Eine Anwendung sollte beispielsweise wcsrlen anstelle von wcslen verwenden, wenn ein nachfolgender Aufruf von wcsrtombs anstelle von wcstombs verwendet wird.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Mapping generischer Textroutinen
| TCHAR.H-Routine | _UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
|---|---|---|---|
| nicht zutreffend | nicht zutreffend | mbrlen |
nicht zutreffend |
Anforderungen
| Routine | Erforderlicher Header |
|---|---|
mbrlen |
<wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
Dieses Beispiel zeigt, inwiefern die Interpretation von Multibytezeichen von der aktuellen Codepage abhängig ist, und demonstriert die Funktion zum Fortsetzen von 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);
}
Code page: 0
é╨éτé¬é╚: Shift-jis hiragana.
Character count: 29
Code page: 932
????: Shift-jis hiragana.
Character count: 25