次の方法で共有


wcrtomb

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

構文

size_t wcrtomb(
   char *mbchar,
   wchar_t wchar,
   mbstate_t *mbstate
);
template <size_t size>
size_t wcrtomb(
   char (&mbchar)[size],
   wchar_t wchar,
   mbstate_t *mbstate
); // C++ only

パラメーター

mbchar
結果として得られるマルチバイトに変換された文字。

wchar
変換するワイド文字。

mbstate
mbstate_t オブジェクトへのポインター。

戻り値

変換されたマルチバイト文字を表すのに必要なバイト数を返します。エラーが発生した場合は -1 を返します。

解説

wcrtomb 関数は、mbstate に含まれる指定された変換の状態で始まるワイド文字を、wchar に含まれている値から、mbchar によって表されるアドレスに変換します。 戻り値は対応するマルチバイト文字を表すために必要なバイト数ですが、MB_CUR_MAX バイトより大きな値を返すことはありません。

mbstate が null の場合、mbchar の変換状態を含む内部 mbstate_t オブジェクトが使用されます。 文字シーケンス wchar に対応するマルチバイト文字表現がない場合は、-1 が返され、 errnoEILSEQに設定されます。

wcrtomb関数は、再起動可能性によって_wctomb_lwctombとは異なります。 同じ関数または再開可能な他の関数の後続の呼び出しのために、変換状態が mbstate に格納されます。 再開可能な関数と再開不可能な関数を混用した場合、結果は未定義です。 たとえば、アプリケーションは wcsrlen を使用し、wcsnlen は使用しないことがあります。これは、後続の呼び出しで wcsrtombs を使用しており、wcstombs は使用しない場合です。

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

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

例外

wcrtomb 関数は、この関数の実行中に現行スレッドのどの関数も setlocale を呼び出さず、かつ mbstate が null である限り、マルチスレッド セーフです。

// crt_wcrtomb.c
// compile with: /W3
// This program converts a wide character
// to its corresponding multibyte character.

#include <string.h>
#include <stdio.h>
#include <wchar.h>

int main( void )
{
    size_t      sizeOfCovertion = 0;
    mbstate_t   mbstate;
    char        mbStr = 0;
    wchar_t*    wcStr = L"Q";

    // Reset to initial conversion state
    memset(&mbstate, 0, sizeof(mbstate));

    sizeOfCovertion = wcrtomb(&mbStr, *wcStr, &mbstate); // C4996
    // Note: wcrtomb is deprecated; consider using wcrtomb_s instead
    if (sizeOfCovertion > 0)
    {
        printf("The corresponding wide character \"");
        wprintf(L"%s\"", wcStr);
        printf(" was converted to the \"%c\" ", mbStr);
        printf("multibyte character.\n");
    }
    else
    {
        printf("No corresponding multibyte character "
               "was found.\n");
    }
}
The corresponding wide character "Q" was converted to the "Q" multibyte character.

要件

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

関連項目

データ変換
ロケール
マルチバイト文字のシーケンスの解釈
mbsinit