Share via


wcstombs、_wcstombs_l

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

size_t wcstombs(
   char *mbstr,
   const wchar_t *wcstr,
   size_t count 
);
size_t _wcstombs_l(
   char *mbstr,
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
size_t wcstombs(
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count 
); // C++ only
template <size_t size>
size_t _wcstombs_l(
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
); // C++ only

パラメーター

  • mbstr
    マルチ バイト文字のシーケンスのアドレス。

  • wcstr
    ワイド文字シーケンスのアドレス。

  • count
    マルチバイトの出力文字列に格納できる最大バイト数。

  • locale
    使用するロケール。

戻り値

が正常に wcstombs のマルチバイト文字列を変換する場合終端の NULL を除きマルチバイト文字列の出力に書き込んだバイト数を返します (存在する場合)。mbstr の引数が NULL 場合wcstombs は対象の文字列のバイトの必要なサイズを返します。wcstombs がマルチバイト文字列に変換できないワイド文字が検出されるとsize_t の入力をキャスト 1 を返しEILSEQ に errno を設定します。

解説

wcstombs の関数は対応するマルチバイト文字に wcstr が指すワイド文字列を変換しmbstr の配列に格納されます。count のパラメーターはマルチバイト文字列の出力 (mbstr のサイズ) に格納できる最大バイト数を示します。一般にワイド文字列を変換するときにバイト数が必要か不明です。ワイド文字は出力文字列では 1 バイトだけです。; そのほかの 2 が必要です。入力文字列内のすべてのワイド文字のマルチバイトの出力文字列に 2 バイト (ワイド文字を含む) の場合結果は NULL 場合は限りません。

wcstombs がワイド文字の null 文字 count が発生したとき。(\ 0) にある場合8 ビットまたは 0 に変換および停止します。したがってmbstr のマルチバイト文字列は wcstombs が変換中にはワイド文字の null 文字を検出したときにのみ null 終了します。wcstr と mbstr が指す文字列が重なり合う場合、wcstombs 関数の動作は未定義です。

mbstr の引数が NULL 場合wcstombs は対象の文字列のバイトの必要なサイズを返します。

wcstombs はパラメーターを検証します。wcstr が NULL であるかまたは count が INT_MAX の 場合この関数は パラメーターの検証 に説明されているように無効なパラメーター ハンドラーを呼び出します。実行の継続が許可された場合関数 EINVAL 番目のセット errno -1。

wcstombs はすべてのロケールに依存する動作に現在のロケールを使用します ; _wcstombs_l は同じですが代わりに渡されたロケールを使用します。詳細については、「ロケール」を参照してください。

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

必要条件

ルーチン

必須ヘッダー

wcstombs

<stdlib.h>

_wcstombs_l

<stdlib.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

次のプログラムは、wcstombs 関数の動作を示しています。

// crt_wcstombs.c
// compile with: /W3
// This example demonstrates the use
// of wcstombs, which converts a string
// of wide characters to a string of 
// multibyte characters.

#include <stdlib.h>
#include <stdio.h>

#define BUFFER_SIZE 100

int main( void )
{
    size_t  count;
    char    *pMBBuffer = (char *)malloc( BUFFER_SIZE );
    wchar_t *pWCBuffer = L"Hello, world.";

    printf("Convert wide-character string:\n" );

    count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s instead
    printf("   Characters converted: %u\n",
            count );
    printf("    Multibyte character: %s\n\n",
           pMBBuffer );

    free(pMBBuffer);
}
  

同等の .NET Framework 関数

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

参照

関連項目

データ変換

ロケール

_mbclen、mblen、_mblen_l

mbstowcs、_mbstowcs_l

mbtowc、_mbtowc_l

wctomb、_wctomb_l

WideCharToMultiByte