Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ç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 , mbleniş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 wcstombsyerine 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 mbrlengö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