次の方法で共有


mbstowcs_s、_mbstowcs_s_l

マルチバイト文字のシーケンスを対応するワイド文字のシーケンスに変換します。バージョンのmbstowcs、_mbstowcs_lで説明されているように、セキュリティの強化機能を備えたCRT のセキュリティ機能

errno_t mbstowcs_s(
   size_t *pReturnValue,
   wchar_t *wcstr,
   size_t sizeInWords,
   const char *mbstr,
   size_t count 
);
errno_t _mbstowcs_s_l(
   size_t *pReturnValue,
   wchar_t *wcstr,
   size_t sizeInWords,
   const char *mbstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
errno_t mbstowcs_s(
   size_t *pReturnValue,
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count 
); // C++ only
template <size_t size>
errno_t _mbstowcs_s_l(
   size_t *pReturnValue,
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count,
   _locale_t locale
); // C++ only

パラメーター

  • [出力] pReturnValue
    変換された文字数。

  • [出力] wcstr
    結果の変換されたワイド文字列用のバッファーのアドレス。

  • [入力] sizeInWords
    サイズはwcstr語でのバッファー。

  • [in]mbstr
    アドレスを null で終わるマルチバイト文字列。

  • [入力] count
    格納するワイド文字の最大数はwcstrバッファーの終端の null を含まない、または_TRUNCATE

  • [入力] locale
    使用するロケール。

戻り値

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。

エラー条件

戻り値と errno

wcstr が NULL でsizeInWords > 0

EINVAL

mbstr が NULL です。

EINVAL

変換先バッファーが小さいため変換後の文字列が収まらない (count が _TRUNCATE の場合は例外。下記の「解説」を参照)

ERANGE

wcstris not NULL and sizeInWords == 0

EINVAL

上記のいずれかの条件が発生すると、「パラメーターの検証」に説明されているように、無効なパラメーターの例外が呼び出されます。実行の続行が許可された場合、関数はエラー コードを返し、errno を表で示されている値に設定します。

解説

mbstowcs_s関数によって示される、マルチバイト文字の文字列に変換mbstrが指すバッファーに格納するワイド文字にwcstr。変換は各文字列に対して行われ、次の条件の 1 つが満たされるまで続行されます。

  • マルチバイトの null 文字が検出されました。

  • 無効なマルチバイト文字が検出されました。

  • 格納するワイド文字の数、 wcstrバッファーと等しいcount。

変換後の文字列は、常に null で終わります (エラーの場合も同様)。

場合count 、特別な値です_TRUNCATEは、 mbstowcs_sに変換される文字列の多くは、null 終端文字用の領域を残したまま、コピー先のバッファーを合わせて。

場合mbstowcs_sが正常に元の文字列に変換、ワイド文字の変換後の文字列を null 終端文字になど、サイズを格納*pReturnValue (提供pReturnValueですNULL)。これは、wcstr 引数が NULL の場合でも発生するので、これを使用して必要なバッファー サイズを確認できます。Note that if wcstr is NULL, count is ignored, and sizeInWords must be 0.

場合mbstowcs_s 、無効なマルチバイト文字が検出される 0 設定*pReturnValue、空の文字列にコピー先のバッファーを設定、設定errnoにEILSEQ、および返しますEILSEQ。

mbstr と wcstr が指す文字列が重なり合う場合、mbstowcs_s 関数の動作は未定義です。

セキュリティに関するメモセキュリティに関するメモ

いることを確認wcstrとmbstrが重なっていないとcountが正しく変換対象のマルチバイト文字の数を反映しています。

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

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

必要条件

ルーチン

必須ヘッダー

mbstowcs_s

<stdlib.h>

_mbstowcs_s_l

<stdlib.h>

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

同等の .NET Framework 関数

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

参照

関連項目

データ変換

ロケール

によって、MultiByteToWideChar

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

_mbclen、mblen、_mblen_l

mbtowc、_mbtowc_l

wcstombs、_wcstombs_l

wctomb、_wctomb_l