mbrlen
Çok baytlı bir karakterin ortasında yeniden başlatma özelliğiyle, geçerli yerel ayarda çok baytlı bir karakteri tamamlamak için gereken bayt sayısını belirleyin.
Sözdizimi
size_t mbrlen(
const char * str,
size_t count,
mbstate_t * mbstate
);
Parametreler
str
Çok baytlı bir karakter dizesinde incelemek için sonraki bayt işaretçisi.
count
denetlenecek en fazla bayt sayısı.
mbstate
başlangıç baytının geçerli kaydırma durumunun işaretçisi str
.
Dönüş değeri
Aşağıdaki değerlerden biri:
Value | Açıklama |
---|---|
0 | Sonraki count veya daha az bayt, geniş null karakteri temsil eden çok baytlı karakteri tamamlar. |
1 - count , dahil |
Sonraki count veya daha az bayt geçerli bir çok baytlı karakteri tamamlar. Döndürülen değer, çok baytlı karakteri tamamlayan bayt sayısıdır. |
(size_t) (-2) | Sonraki count baytlar eksik ancak geçerli olabilecek çok baytlı bir karaktere katkıda bulunur ve tüm count baytlar işlenmiştir. |
(size_t) (-1) | Kodlama hatası oluştu. Sonraki count veya daha az bayt, tam ve geçerli bir çok baytlı karaktere katkıda bulunmaz. Bu durumda, errno EILSEQ olarak ayarlanır ve içindeki mbstate dönüştürme durumu belirtilmez. |
Açıklamalar
İşlev, mbrlen
üst karakter dizileri de dahil olmak üzere sonraki çok baytlı karakteri tamamlamak için gereken bayt sayısını belirlemek için bayt işaretiyle str
başlayarak en count
fazla bayt sayısını inceler. Bu, kullanıcı tarafından sağlanan mbstate_t
bir nesne veya kitaplık tarafından sağlanan statik bir iç nesne olan mbstate
çağrıya mbrtowc(NULL, str, count, &mbstate)
eşdeğerdir.
İşlev, mbrlen
parametresindeki tamamlanmamış çok baytlı bir karakteri mbstate
kaydeder ve kaydırma durumunu kullanır. Bu nedenle **mbrlen
**, gerekirse çok baytlı bir karakterin ortasında yeniden başlatılabilir ve en fazla count
bayt değerini inceleyebilir. Null işaretçiyse mbstate
, mbrlen
vardiya durumunu depolamak için iç, statik mbstate_t
bir nesne kullanır. İç mbstate_t
nesne iş parçacığı açısından güvenli olmadığından her zaman kendi mbstate
parametrenizi ayırmanızı ve geçirmenizi öneririz.
İşlev, mbrlen
yeniden başlatılabilirliğine göre , mblen
işlevinden _mblen_l
_mbclen
farklıdır. Vardiya durumu, aynı veya diğer yeniden başlatılabilir işlevlere yapılan sonraki çağrılar için içinde mbstate
depolanır. Yeniden başlatılabilir ve yeniden başlatılamayan işlevlerin kullanımı karıştırılırken sonuçlar tanımlanmamıştır. Örneğin, bir uygulama yerine wcslen
sonraki bir çağrısı wcsrtombs
kullanılıyorsa wcstombs
yerine kullanmalıdırwcsrlen
.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Genel metin yordamı eşlemeleri
TCHAR.H yordamı | _UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
uygulanamaz | uygulanamaz | mbrlen |
uygulanamaz |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
mbrlen |
<wchar.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
Bu örnek, çok baytlı karakterlerin yorumlanmasının geçerli kod sayfasına nasıl bağlı olduğunu gösterir ve öğesinin devam etme özelliğini mbrlen
gösterir.
// 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