wcstombs
, _wcstombs_l
ワイド文字のシーケンスを、対応するマルチバイト文字のシーケンスに変換します。 これらの関数のセキュリティを強化したバージョンを使用できます。「wcstombs_s
、_wcstombs_s_l
」を参照してください。
構文
size_t wcstombs(
char *mbstr,
const wchar_t *wcstr,
size_t count
);
size_t _wcstombs_l(
char *mbstr,
const wchar_t *wcstr,
size_t count,
_locale_t locale
);
template <size_t size>
size_t wcstombs(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count
); // C++ only
template <size_t size>
size_t _wcstombs_l(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count,
_locale_t locale
); // C++ only
パラメーター
mbstr
マルチバイト文字のシーケンスのアドレス。
wcstr
ワイド文字のシーケンスのアドレス。
count
マルチバイト出力文字列に格納できる最大バイト数。
locale
使用するロケール。
戻り値
wcstombs
によってマルチバイト文字列が正常に変換された場合は、マルチバイト出力文字列に書き込まれたバイト数を返します (終端の NULL
がある場合でもバイト数に含まれません)。 mbstr
引数が NULL
の場合、wcstombs
は必要な対象文字列のサイズ (バイト数) を返します。 マルチバイト文字に変換できないワイド文字 wcstombs
検出された場合は、-1 キャストを size_t
型に戻し、 errno
を EILSEQ
に設定します。
解説
wcstombs
関数は、wcstr
が指すワイド文字列を対応するマルチバイト文字に変換し、mbstr
配列に結果を格納します。 count
パラメーターはマルチバイト出力文字列に格納できる最大バイト数 (つまり、mbstr
のサイズ) を示します。 通常、ワイド文字列を変換するときに必要になるバイト数は不明です。 一部のワイド文字では、出力文字列に 1 バイトのみが必要です。それ以外の場合は 2 バイトが必要です。 入力文字列内のすべてのワイド文字に対してマルチバイト出力文字列に 2 バイトがある場合 (ワイド文字 NULL
を含む)、結果は収まることが保証されます。
Windows 10 バージョン 1803 (10.0.17134.0) 以降では、ユニバーサル C ランタイムで UTF-8 コード ページの使用がサポートされます。 wcstombs(NULL, wcstr, 0)
を使用して、変換に必要な正しいサイズを取得します。これは、ワイド文字ごとに 2 バイトが必要であると仮定すると、十分ではない可能性があるためです。 UTF-8 サポートの詳細については、 UTF-8 のサポートを参照してください。
wcstombs
は、count
の発生前または発生時にワイド文字の NULL
文字 (L'\0') を検出すると、それを 8 ビットの 0 に変換して停止します。 このため、mbstr
のマルチバイト文字の文字列が null 終了になるのは、wcstombs
が変換中にワイド文字の NULL
文字を検出した場合だけです。 wcstr
および mbstr
が指すシーケンスが重なり合う場合、wcstombs
の動作は未定義です。
mbstr
引数が NULL
の場合、wcstombs
は必要な対象文字列のサイズ (バイト数) を返します。
wcstombs
はそのパラメーターを検証します。 wcstr
がNULL
されている場合、またはcount
がINT_MAX
より大きい場合、この関数は、Parameter 検証で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、この関数は errno
を EINVAL
に設定し、-1 を返します。
wcstombs
は、ロケールに依存するあらゆる動作に現在のロケールを使用します。_wcstombs_l
は、渡されたロケールを代わりに使用することを除いて同じです。 詳細については、「 Locale」を参照してください。
C++ では、これらの関数にテンプレートのオーバーロードがあります。このオーバーロードは、これらの関数に対応するセキュリティで保護された新しい関数を呼び出します。 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
wcstombs |
<stdlib.h> |
_wcstombs_l |
<stdlib.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
このプログラムは、wcstombs
関数の動作を示しています。
// crt_wcstombs.c
// compile with: /W3
// This example demonstrates the use
// of wcstombs, which converts a string
// of wide characters to a string of
// multibyte characters.
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
size_t count;
char *pMBBuffer = (char *)malloc( BUFFER_SIZE );
wchar_t *pWCBuffer = L"Hello, world.";
printf("Convert wide-character string:\n" );
count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996
// Note: wcstombs is deprecated; consider using wcstombs_s instead
printf(" Characters converted: %u\n",
count );
printf(" Multibyte character: %s\n\n",
pMBBuffer );
free(pMBBuffer);
}
Convert wide-character string:
Characters converted: 13
Multibyte character: Hello, world.
関連項目
データ変換
ロケール
_mbclen
、 mblen
、 _mblen_l
mbstowcs
, _mbstowcs_l
mbtowc
, _mbtowc_l
wctomb
, _wctomb_l
WideCharToMultiByte