Visual Studio 2017 を使用することをお勧めします

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
mbstris NULL and sizeInBytes > 0EINVAL
wcstrNULL ですEINVAL
コピー先のバッファーが小さすぎて変換後の文字列が含まれる (しない限り、count_TRUNCATE; 解説を参照してください)ERANGE

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

wcstombs_s関数が指すワイド文字の文字列に変換wcstrが指すバッファーに格納されたマルチバイト文字にmbstrします。 これらの条件のいずれかが満たされるまで、各文字に対して変換が続きます。

  • Null ワイド文字が検出されました。

  • 変換できないワイド文字が検出されました。

  • 格納されるバイト数、 mbstr equals をバッファーcountします。

変換先の文字列は常に null で終わる (発生した場合でもエラー) です。

場合count特殊な値は、 _TRUNCATE、しwcstombs_sだけだけでなく、文字列の変換が null 終端文字の余地を残した状態で、コピー先のバッファーに適合します。

場合wcstombs_sソース文字列を変換が正常に null 終端文字も含めて、変換された文字列のバイト単位のサイズを入れ*``pReturnValue(提供されるpReturnValueNULL)。 これが発生した場合でも、mbstr引数はNULLし、必要なバッファー サイズを決定する方法を提供します。 場合mbstrNULLcountは無視されます。

場合wcstombs_s、マルチバイト文字に変換できないワイド文字を検出したに 0 を格納して*``pReturnValue、空の文字列にコピー先のバッファーを設定、設定errnoEILSEQ、し、返しますEILSEQします。

wcstr および mbstr が指すシーケンスが重なり合う場合、wcstombs_s の動作は未定義です。

System_CAPS_ICON_important.jpg 重要

いることを確認wcstrmbstrが重なり合わず、countに変換するワイド文字の数を正確に反映します。

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

表示: