mbrlen() - マルチバイト文字の長さの計算

標準

標準/拡張機能 C/C++ 依存項目

ISO C 改訂
C99
Single UNIX Specification、バージョン 3

両方  

形式

XPG4
#include <wchar.h>

size_t mbrlen(const char * __restrict__s, size_t n, mbstate_t * __restrict__ps);
XPG4
#define _XOPEN_SOURCE
#define _MSE_PROTOS
#include <wchar.h>

size_t mbrlen(const char *s, size_t n, mbstate_t *ps);

機能説明

初期シフト状態に戻るのに必要なバイト数を計算します。これは以下と同じです。
   mbrtowc((wchar_t *)0, s, n, ps != NULL ? ps : &internal);

この場合、&internal は、mbrlen() 関数の 内部 mbstate_t オブジェクトのアドレスです。

mbrlen() は mblen() の再始動可能バージョンです。つまり、シフト状態情報は引数の 1 つとして渡され、終了時に更新されます。mbrlen() を使用すると、シフト状態の情報を保持している場合、あるマルチバイト・ストリングから別の マルチバイト・ストリングに切り替えることができます。

このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果が発生する可能性があります。

XPG4 の特殊な動作

プログラム・ソース・ファイル内の wchar ヘッダーをインクルードするステートメントより前に、XPG4 の 動作を指定してフィーチャー・テスト・マクロを定義した場合には、_MSE_PROTOS フィーチャー・テスト・マクロも定義して、プログラムのコンパイル時に使用可能な wchar ヘッダーの mbrlen() 関数の宣言を行う必要があります。XPG4 と他のフィーチャー・テスト・マクロのリストについては、表 1 を参照してください。

戻り値

s が NULL ポインターである場合、mbrlen() は、シフト状態を初期シフト状態にリセットして、0 を戻します。

s が NULL ポインターでない場合、mbrlen() は、以下の中で適用される最初のものを戻します。
0
続く n 以下のバイト数によって、NULL ワイド文字に対応する有効なマルチ バイト文字が完成する場合。
次の n または数バイトが有効なマルチバイト文字 を完成する場合。つまり、戻り値はマルチバイト文字を 完成するバイト数となります。
-2
次の n バイトが不完全な (ただし有効な可能性 もあります) マルチバイト文字を形成し、n バイトすべてが処理された 場合。つまり、n の値が MB_CUR_MAX マクロの値よりも小さい場合、これが起こるかどうかは指定されていません。
注: -2 の値が戻され、かつ n が MB_CUR_MAX 以上で ある場合は、そのストリングに冗長のシフトアウトおよびシフトイン文字が 含まれます。マルチバイト・ストリングの処理を継続するには、n の値で ポインターを増分し、mbrtowc() 関数を呼び出します。
-1
エンコード・エラーが発生した場合 (次の n または それよりも少ないバイト数でさえ、完全で有効なマルチバイト文字の作成に使用できないとき)、EILSEQ マクロの値は errno に保管されますが、変換状態は未変更のままになります。

CELEBM03
⁄* CELEBM03 *⁄                                   
#include <stdio.h>                                                              
#include <stdlib.h>                                                             
#include <wchar.h>                                                              
                                                                                
int main(void)                                                                  
{                                                                               
   char      mbs[5] = "a";    ⁄* string containing the multibyte char *⁄        
   mbstate_t ss     = 0;      ⁄* set shift state to the initial state *⁄        
   int       length;                                                            
                                                                                
   ⁄* Determine the length in bytes of a multibyte character pointed  *⁄        
   ⁄* to by mbs.                                                      *⁄        
                                                                                
   length = mbrlen(mbs, MB_CUR_MAX, &ss);                                       
                                                                                
   printf("    length: %d ¥n", length);                                         
   printf("       mbs:¥"%s¥"¥n", mbs);                                          
   printf("MB_CUR_MAX: %d ¥n", MB_CUR_MAX);                                     
   printf("        ss: %d ¥n", ss);                                             
}                                                                               
出力:
    length: 1
       mbs:"a"
MB_CUR_MAX: 4
        ss: 0

関連情報