wcstombs_s、_wcstombs_s_l
公開日: 2016年10月
Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。
ワイド文字のシーケンスを対応するマルチバイト文字のシーケンスに変換します。 バージョンのwcstombs、_wcstombs_l 」の説明に従って、セキュリティ強化機能を備えたCRT のセキュリティ機能です。
errno_t wcstombs_s( size_t *pReturnValue, char *mbstr, size_t sizeInBytes, const wchar_t *wcstr, size_t count ); errno_t _wcstombs_s_l( size_t *pReturnValue, char *mbstr, size_t sizeInBytes, const wchar_t *wcstr, size_t count, _locale_t locale ); template <size_t size> errno_t wcstombs_s( size_t *pReturnValue, char (&mbstr)[size], const wchar_t *wcstr, size_t count ); // C++ only template <size_t size> errno_t _wcstombs_s_l( size_t *pReturnValue, char (&mbstr)[size], const wchar_t *wcstr, size_t count, _locale_t locale ); // C++ only
パラメーター
[出力] pReturnValue
変換された文字数。
[出力] mbstr
変換されたマルチバイト文字の文字列を生成されるバッファーのアドレス。
[in]sizeInBytes
サイズのバイト数、mbstr
バッファー。
[入力] wcstr
変換するワイド文字の文字列へのポインター。
[入力] count
格納されるバイトの最大数、mbstr
バッファー、終端の null 文字を含まないまたは_TRUNCATEします。
[入力] locale
使用するロケール。
正常終了した場合は&0; を返します。失敗した場合はエラー コードを返します。
エラー条件 | 戻り値および errno |
---|---|
mbstr is NULL and sizeInBytes > 0 | EINVAL |
wcstr は NULL です | EINVAL |
コピー先のバッファーが小さすぎて変換後の文字列が含まれる (しない限り、count は_TRUNCATE ; 解説を参照してください) | ERANGE |
これらの条件のいずれかの問題が発生した場合、」の説明に従って無効なパラメーター例外が呼び出されます。パラメーターの検証します。 実行の続行が許可された場合、関数はエラー コードを返し、表に示すように errno
を設定します。
wcstombs_s
関数が指すワイド文字の文字列に変換wcstr
が指すバッファーに格納されたマルチバイト文字にmbstr
します。 これらの条件のいずれかが満たされるまで、各文字に対して変換が続きます。
Null ワイド文字が検出されました。
変換できないワイド文字が検出されました。
格納されるバイト数、
mbstr
equals をバッファーcount
します。
変換先の文字列は常に null で終わる (発生した場合でもエラー) です。
場合count
特殊な値は、 _TRUNCATE、しwcstombs_s
だけだけでなく、文字列の変換が null 終端文字の余地を残した状態で、コピー先のバッファーに適合します。
場合wcstombs_s
ソース文字列を変換が正常に null 終端文字も含めて、変換された文字列のバイト単位のサイズを入れ*``pReturnValue
(提供されるpReturnValue
はNULL
)。 これが発生した場合でも、mbstr
引数はNULL
し、必要なバッファー サイズを決定する方法を提供します。 場合mbstr
はNULL
、count
は無視されます。
場合wcstombs_s
、マルチバイト文字に変換できないワイド文字を検出したに 0 を格納して*``pReturnValue
、空の文字列にコピー先のバッファーを設定、設定errno
にEILSEQ
、し、返しますEILSEQ
します。
wcstr
および mbstr
が指すシーケンスが重なり合う場合、wcstombs_s
の動作は未定義です。
いることを確認 |
wcstombs_s
現在のロケールは、ロケールに依存する動作を行います。_wcstombs_s_l
と同じwcstombs
代わりに渡されたロケールを使用する点が異なります。 詳細については、「 Locale」を参照してください。
C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファー長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。 詳細については、「 Secure Template Overloads」を参照してください。
ルーチン | 必須ヘッダー |
---|---|
wcstombs_s | <stdlib.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「 互換性 」を参照してください。
このプログラムの動作を示しています、wcstombs_s
関数です。
// crt_wcstombs_s.c // This example converts a wide character // string to a multibyte character string. #include <stdio.h> #include <stdlib.h> #include <assert.h> #define BUFFER_SIZE 100 int main( void ) { size_t i; char *pMBBuffer = (char *)malloc( BUFFER_SIZE ); wchar_t*pWCBuffer = L"Hello, world."; printf( "Convert wide-character string:\n" ); // Conversion wcstombs_s(&i, pMBBuffer, (size_t)BUFFER_SIZE, pWCBuffer, (size_t)BUFFER_SIZE ); // Output printf(" Characters converted: %u\n", i); printf(" Multibyte character: %s\n\n", pMBBuffer ); // Free multibyte character buffer if (pMBBuffer) { free(pMBBuffer); } }
Convert wide-character string: Characters converted: 14 Multibyte character: Hello, world.
該当なし。 標準 C 関数を呼び出すには、 PInvoke
を使用します。 詳細については、「 プラットフォーム呼び出しの例」を参照してください。
データ変換
ロケール
_mbclen、mblen、_mblen_l
mbstowcs、_mbstowcs_l
mbtowc、_mbtowc_l
wctomb_s、_wctomb_s_l
WideCharToMultiByte