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