次の方法で共有


wcrtomb_s

マルチバイト文字列表現にはワイド文字に変換します。この関数は、「CRT のセキュリティ機能」に説明されているように、wcrtomb のセキュリティが強化されたバージョンです。

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

パラメーター

  • [出力] pReturnValue
    エラーが発生した場合は -1 バイト数を返します。

  • [出力] mbchar
    結果の文字列に変換する文字。

  • [入力] sizeOfmbchar
    バイト mbchar の変数のサイズ。

  • [入力] wchar
    変換するワイド文字。

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

戻り値

エラーが発生した場合はerrno かの値。

解説

wcrtomb_s の関数は mbchar によって表されるアドレスに wchar に格納されている値からmbstate に含まれる指定した変換状態で始まるワイド文字を変換します。pReturnValue の値はエラーが発生した場合MB_CUR_MAX バイトさらに変換されたバイト数または -1 ではありません。

mbstate が null の場合変換 mbstate_t の内部状態が使用されます。wchar に含まれる文字に対応するマルチバイト文字がない場合pReturnValue の値は -1 で関数は EILSEQ の errno の値を返します。

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

この関数を使用してC++ ではテンプレートのオーバーロードによって簡略化 ; オーバーロードではバッファー長を自動的に (サイズ引数を指定する必要が推論)削除する新規に対応すると自動的に古い安全ではない関数を置換できる場合。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。

例外

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

使用例

// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//

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

int main( void )
{
    errno_t     returnValue;
    size_t      pReturnValue;
    mbstate_t   mbstate;
    size_t      sizeOfmbStr = 1;
    char        mbchar = 0;
    wchar_t*    wchar = L"Q\0";

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

    returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
                            *wchar, &mbstate);
    if (returnValue == 0) {
        printf("The corresponding wide character \"");
        wprintf(L"%s\"", wchar);
        printf(" was converted to a the \"%c\" ", mbchar);
        printf("multibyte character.\n");
    }
    else
    {
        printf("No corresponding multibyte character "
               "was found.\n");
    }
}
  

同等の .NET Framework 関数

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

必要条件

ルーチン

必須ヘッダー

wcrtomb_s

<wchar.h>

参照

関連項目

データ変換

ロケール

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

mbsinit