mbsrtowcs_s
マルチバイト文字の文字列形式にはワイド文字列に変換します。CRT のセキュリティ機能 に説明されているようにのセキュリティが強化されたバージョンのの mbsrtowcs。
errno_t mbsrtowcs_s(
size_t *pReturnValue,
wchar_t *wcstr,
size_t sizeInWords,
const char **mbstr,
size_t count,
mbstate_t *mbstate
);
template <size_t size>
errno_t mbsrtowcs_s(
size_t *pReturnValue,
wchar_t (&wcstr)[size],
const char **mbstr,
size_t count,
mbstate_t *mbstate
); // C++ only
パラメーター
[出力] pReturnValue
変換された文字数。[出力] wcstr
発生する可能性のバッファーのアドレスはワイド文字列をに変換します。[出力] sizeInWords
WORD () wcstr のワイド文字単位のサイズ。[入力] mbstr
変換するマルチバイト文字列の位置へのポインター。[入力] count
wcstr でバッファーの終端の null は含まない格納するワイド文字の最大数を _TRUNCATE。[入力] mbstate
mbstate_t 変換状態のオブジェクトへのポインター。
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
エラー条件 |
戻り値と errno |
---|---|
wcstr が NULL でsizeInWords > 0 |
EINVAL |
mbstr が NULL です。 |
EINVAL |
変換先バッファーが小さいため変換後の文字列が収まらない (count が _TRUNCATE の場合は例外。下記の「解説」を参照) |
ERANGE |
上記のいずれかの条件が発生すると、「パラメーターの検証」に説明されているように、無効なパラメーターの例外が呼び出されます。実行の続行が許可された場合、関数はエラー コードを返し、errno を表で示されている値に設定します。
解説
mbsrtowcs_s の関数は mbstate に含まれる変換状態を使用して wcstr によって指されるバッファーに格納されているワイド文字に mbstr が指すマルチバイト文字の文字列をに変換します。変換は各文字列に対して行われ、次の条件の 1 つが満たされるまで続行されます。
マルチバイトの null 文字が検出された
無効なマルチバイト文字が検出された
wcstr のバッファーに格納されているワイド文字数。count になります。
変換後の文字列は、常に null で終わります (エラーの場合も同様)。
count が特殊な値 _TRUNCATE 場合mbsrtowcs_s は終端文字 NULL 用の領域を残して変換先バッファーに収まるように文字列と変換します。
が正常に mbsrtowcs_s ソース文字列を変換する場合*pReturnValue に変換した文字列のワイド文字単位のサイズをnull 終端文字を含みますします (指定された pReturnValue は NULL) です。これは、wcstr 引数が NULL の場合でも発生するので、これを使用して必要なバッファー サイズを確認できます。wcstr が NULL の場合、count は無視されます。
mbstate が NULL 場合変換 mbstate_t の内部状態が使用されます。
mbsrtowcs_s に無効なマルチバイト文字が発生した場合は*pReturnValue に -1 を設定し空の文字列に変換先バッファーを設定しEILSEQ に errno を設定しEILSEQ を返します。
mbstr と wcstr が指す文字列が重なり合う場合、mbsrtowcs_s 関数の動作は未定義です。mbsrtowcs_s現在のロケールの LC_TYPE カテゴリ別に影響されます。
セキュリティに関するメモ |
---|
wcstr と mbstr が重複しないことおよび count を変換するためにマルチバイト文字数を反映していることを確認します。 |
mbsrtowcs_s の関数は restartability によって mbstowcs_s、_mbstowcs_s_l とは異なります。変換は同じ状態またはそのほかの restartable 関数への後続の呼び出しの mbstate に格納されます。結果は restartable と nonrestartable 関数の使用を使用すると未定義です。たとえばアプリケーションが mbslen ではなく mbsrtowcs_s への後続の呼び出しは mbstowcs_s. の代わりに使用するとmbsrlen を使用します。
この関数を使用してC++ ではテンプレートのオーバーロードによって簡略化 ; オーバーロードではバッファー長を自動的に (サイズ引数を指定する必要が推論)削除する新規に対応すると自動的に古い安全ではない関数を置換できる場合。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
例外
mbsrtowcs の関数はこの関数の実行中にmbstate が null で現在のスレッドの関数が setlocale を呼び出さない限りマルチスレッド セーフです。
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
mbsrtowcs |
<wchar.h> |