mbrlen

Tentukan jumlah byte yang diperlukan untuk menyelesaikan karakter multibyte di lokal saat ini, dengan kemampuan memulai ulang di tengah karakter multibyte.

Sintaks

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

Parameter

str
Arahkan ke byte berikutnya untuk memeriksa string karakter multibyte.

count
Jumlah maksimum byte yang akan diperiksa.

mbstate
Penunjuk ke status pergeseran saat ini dari byte awal .str

Nilai hasil

Salah satu dari nilai berikut:

Nilai Deskripsi
0 Byte berikutnya count atau lebih sedikit menyelesaikan karakter multibyte yang mewakili karakter null lebar.
1 hingga count, inklusif Byte berikutnya count atau lebih sedikit menyelesaikan karakter multibyte yang valid. Nilai yang dikembalikan adalah jumlah byte yang menyelesaikan karakter multibyte.
(size_t) (-2) Byte berikutnya count berkontribusi pada karakter multibyte yang tidak lengkap tetapi berpotensi valid dan semua count byte telah diproses.
(size_t) (-1) Terjadi kesalahan pengodean. Byte berikutnya count atau lebih sedikit tidak berkontribusi pada karakter multibyte yang lengkap dan valid. Dalam hal ini, errno diatur ke EILSEQ dan status konversi di mbstate tidak ditentukan.

Keterangan

Fungsi ini mbrlen memeriksa paling banyak count byte yang dimulai dengan byte yang ditunjuk oleh str untuk menentukan jumlah byte yang diperlukan untuk menyelesaikan karakter multibyte berikutnya, termasuk urutan shift apa pun. Ini setara dengan panggilan mbrtowc(NULL, str, count, &mbstate) di mana mbstate merupakan objek yang disediakan mbstate_t pengguna, atau objek internal statis yang disediakan oleh pustaka.

Fungsi mbrlen menyimpan dan menggunakan status shift karakter multibyte yang tidak lengkap dalam mbstate parameter . Itulah sebabnya **mbrlen**dapat menghidupkan ulang di tengah karakter multibyte, jika diperlukan, dan memeriksa paling banyak count byte. Jika mbstate adalah penunjuk null, mbrlen menggunakan objek statis mbstate_t internal untuk menyimpan status shift. Karena objek internal mbstate_t tidak aman untuk utas, kami sarankan Anda selalu mengalokasikan dan meneruskan parameter Anda sendiri mbstate .

Fungsi mbrlen ini berbeda dari _mbclen, mblen, _mblen_l dengan restartability-nya. Status shift disimpan untuk mbstate panggilan berikutnya ke fungsi yang sama atau dapat dimulai ulang lainnya. Hasil tidak terdefinisi saat mencampur penggunaan fungsi yang dapat dimulai ulang dan tidak dapat ditarik kembali. Misalnya, aplikasi harus menggunakan wcsrlen alih-alih wcslen jika panggilan berikutnya digunakan wcsrtombs alih-alih wcstombs.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Pemetaan rutin teks generik

TCHAR. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
tidak berlaku tidak berlaku mbrlen tidak berlaku

Persyaratan

Rutin Header yang diperlukan
mbrlen <wchar.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

Contoh ini menunjukkan bagaimana interpretasi karakter multibyte bergantung pada halaman kode saat ini, dan menunjukkan kemampuan memulai kembali .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

Baca juga

Manipulasi string
Lokal