ワイド文字をマルチバイト文字の表現に変換します。Convert a wide character into its multibyte character representation. この関数のセキュリティが強化されたバージョンについては、「wcrtomb_s」を参照してください。A more secure version of this function is available; see 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


結果として得られるマルチバイトに変換された文字。The resulting multibyte converted character.

変換するワイド文字。A wide character to convert.

ポインター、 mbstate_tオブジェクト。A pointer to an mbstate_t object.

戻り値Return Value

変換されたマルチバイト文字を表すのに必要なバイト数を返します。エラーが発生した場合は -1 を返します。Returns the number of bytes required to represent the converted multibyte character, otherwise a -1 if an error occurs.


Wcrtomb関数以降に含まれる指定された変換の状態では、ワイド文字に変換呼び出すために含まれている値からwcharに、によって表されるアドレスmbcharします。The wcrtomb function converts a wide character, beginning in the specified conversion state contained in mbstate, from the value contained in wchar, into the address represented by mbchar. 戻り値は、対応するマルチバイト文字を表すために必要なバイト数が、返すことはできません、複数のMB_CUR_MAXバイト。The return value is the number of bytes required to represent the corresponding multibyte character, but it will not return more than MB_CUR_MAX bytes.

場合呼び出すためが null の場合、内部mbstate_tオブジェクトの変換状態を含むmbchar使用されます。If mbstate is null, the internal mbstate_t object containing the conversion state of mbchar is used. 場合の文字シーケンスwcharが対応するマルチバイト文字の表現、-1 が返されます、 errnoに設定されているEILSEQします。If the character sequence wchar does not have a corresponding multibyte character representation, a -1 is returned and the errno is set to EILSEQ.

Wcrtomb関数とは異なりますwctomb、_wctomb_lによってその再起動します。The wcrtomb function differs from wctomb, _wctomb_l by its restartability. 変換の状態が格納されている呼び出すため同じか、またはその他の再開可能な関数を呼び出すのためです。The conversion state is stored in mbstate for subsequent calls to the same or other restartable functions. 再開可能な関数と再開不可能な関数を混用した場合、結果は未定義です。Results are undefined when mixing the use of restartable and nonrestartable functions. たとえば、アプリケーションは使用なくwcsnlen後続の呼び出しの場合は、 wcsrtombsの代わりに使用されたwcstombs.For example, an application would use wcsrlen rather than wcsnlen, if a subsequent call to wcsrtombs were used instead of wcstombs.

C++ では、この関数にテンプレートのオーバーロードがあります。このオーバーロードは、この関数に対応するセキュリティで保護された新しい関数を呼び出します。In C++, this function has a template overload that invokes the newer, secure counterparts of this function. 詳細については、「 Secure Template Overloads」を参照してください。For more information, see Secure Template Overloads.


Wcrtomb関数は、現在のスレッドで関数が呼び出すない限り、マルチ スレッド セーフsetlocale中に、この関数の実行中に、呼び出すためが null です。The wcrtomb function is multithread safe as long as no function in the current thread calls setlocale while this function is executing and while the mbstate is 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");
        printf("No corresponding multibyte character "
               "was found.\n");
The corresponding wide character "Q" was converted to the "Q" multibyte character.


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

関連項目See also

データ変換Data Conversion
マルチバイト文字のシーケンスの解釈Interpretation of Multibyte-Character Sequences