次の方法で共有


wcsrtombs

マルチバイト文字の文字列形式にはワイド文字列に変換します。この関数のセキュリティが強化されたバージョンについては、「wcsrtombs_s」を参照してください。

size_t wcsrtombs(
   char *mbstr,
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
);
template <size_t size>
size_t wcsrtombs(
   char (&mbstr)[size],
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
); // C++ only

パラメーター

  • [出力] mbstr
    変換結果のマルチバイト文字列のアドレスの位置。

  • [入力] wcstr
    変換されるワイド文字列の位置に間接的に参照します。

  • [入力] count
    変換される文字数。

  • [入力] mbstate
    mbstate_t 変換状態のオブジェクトへのポインター。

戻り値

エラーが発生した場合は正常に変換されていない null バイト (存在する場合)それよりを終了する null を含むバイト数を返します。

解説

wcsrtombs の関数は mbstr のアドレスに wcstr の値の間接が指す先の mbstate に含まれている指定された変換状態で始まるワイド文字の文字列をに変換します。変換の各文字にするまで続行されます : ワイド文字を終了するとnull が見つかり非準拠する文字があるか次の文字が count に含まれる制限を超えている場合。wcsrtombs がワイド文字の null 文字 count が発生したとき。(\ 0) にある場合8 ビットまたは 0 に変換および停止します。

したがってmbstr のマルチバイト文字列は wcsrtombs が変換中にはワイド文字の null 文字を検出したときにのみ null 終了します。wcstr と mbstr が指す文字列が重なり合う場合、wcsrtombs 関数の動作は未定義です。wcsrtombs現在のロケールの LC_TYPE カテゴリ別に影響されます。

wcsrtombs の関数は restartability によって wcstombs、_wcstombs_l とは異なります。変換は同じ状態またはそのほかの restartable 関数への後続の呼び出しの mbstate に格納されます。結果は restartable と nonrestartable 関数の使用を使用すると未定義です。たとえばアプリケーションが wcsnlen ではなく wcsrtombs への後続の呼び出しは wcstombs の代わりに使用するとwcsrlen を使用します。

mbstr の引数が NULL 場合wcsrtombs は対象の文字列のバイトの必要なサイズを返します。mbstate が null の場合変換 mbstate_t の内部状態が使用されます。文字のシーケンス wchar に対応するマルチバイト文字表現が見つからなかった場合はを返しerrno は EILSEQ に設定されます。

C++ ではこの関数によって新しい関数を呼び出しますテンプレート オーバーロードがありさらに安全この関数の対応があります。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。

例外

wcsrtombs の関数はこの関数の実行中にmbstate が null でない現在のスレッドの関数が setlocale を呼び出さない限りマルチスレッド セーフです。

使用例

// crt_wcsrtombs.cpp
// compile with: /W3
// This code example converts a wide
// character string into a multibyte
// character string.

#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>

#define MB_BUFFER_SIZE 100

int main()
{
    const wchar_t   wcString[] = 
                    {L"Every good boy does fine."};
    const wchar_t   *wcsIndirectString = wcString;
    char            mbString[MB_BUFFER_SIZE];
    size_t          countConverted;
    mbstate_t       mbstate;

    // Reset to initial shift state
    ::memset((void*)&mbstate, 0, sizeof(mbstate));

    countConverted = wcsrtombs(mbString, &wcsIndirectString,
                               MB_BUFFER_SIZE, &mbstate); // C4996
    // Note: wcsrtombs is deprecated; consider using wcsrtombs_s
    if (errno == EILSEQ)
    {
        printf( "An encoding error was detected in the string.\n" );
    }
    else 
    {
        printf( "The string was successfuly converted.\n" );
    }
}
  

同等の .NET Framework 関数

該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

必要条件

ルーチン

必須ヘッダー

wcsrtombs

<wchar.h>

参照

関連項目

データ変換

ロケール

マルチバイト文字のシーケンスの解釈

wcrtomb

wcrtomb_s

wctomb、_wctomb_l

wcstombs、_wcstombs_l

mbsinit