次の方法で共有


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 検出された場合は、-1 キャストを size_t 型に戻し、 errnoEILSEQ に設定します。

解説

wcstombs 関数は、wcstr が指すワイド文字列を対応するマルチバイト文字に変換し、mbstr 配列に結果を格納します。 count パラメーターはマルチバイト出力文字列に格納できる最大バイト数 (つまり、mbstr のサイズ) を示します。 通常、ワイド文字列を変換するときに必要になるバイト数は不明です。 一部のワイド文字では、出力文字列に 1 バイトのみが必要です。それ以外の場合は 2 バイトが必要です。 入力文字列内のすべてのワイド文字に対してマルチバイト出力文字列に 2 バイトがある場合 (ワイド文字 NULLを含む)、結果は収まることが保証されます。

Windows 10 バージョン 1803 (10.0.17134.0) 以降では、ユニバーサル C ランタイムで UTF-8 コード ページの使用がサポートされます。 wcstombs(NULL, wcstr, 0)を使用して、変換に必要な正しいサイズを取得します。これは、ワイド文字ごとに 2 バイトが必要であると仮定すると、十分ではない可能性があるためです。 UTF-8 サポートの詳細については、 UTF-8 のサポートを参照してください。

wcstombs は、count の発生前または発生時にワイド文字の NULL 文字 (L'\0') を検出すると、それを 8 ビットの 0 に変換して停止します。 このため、mbstr のマルチバイト文字の文字列が null 終了になるのは、wcstombs が変換中にワイド文字の NULL 文字を検出した場合だけです。 wcstr および mbstr が指すシーケンスが重なり合う場合、wcstombs の動作は未定義です。

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

wcstombs はそのパラメーターを検証します。 wcstrNULLされている場合、またはcountINT_MAXより大きい場合、この関数は、Parameter 検証で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、この関数は errnoEINVAL に設定し、-1 を返します。

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

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

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

要件

ルーチンによって返される値 必須ヘッダー
wcstombs <stdlib.h>
_wcstombs_l <stdlib.h>

互換性の詳細については、「 Compatibility」を参照してください。

このプログラムは、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);
}
Convert wide-character string:
   Characters converted: 13
    Multibyte character: Hello, world.

関連項目

データ変換
ロケール
_mbclenmblen_mblen_l
mbstowcs, _mbstowcs_l
mbtowc, _mbtowc_l
wctomb, _wctomb_l
WideCharToMultiByte