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 を入力するには、キャストを返し、EILSEQに errno を設定します。
解説
wcstombs 関数は、対応するマルチバイト文字に wcstr が指すワイド文字列を変換し、mbstr の配列に結果を保存します。 count パラメーターは、マルチバイトの出力文字列 (つまり、mbstrsize) に格納できる最大バイト数を示します。 一般に、ワイド文字列を変換するときにバイトが必要かわからない。 あるワイド文字が出力文字列を 1 バイトだけです。; そのほかの 2 が必要です。 入力文字列のすべてのワイド文字のマルチバイトの出力文字列に 2 バイト (を含むワイド文字 NULL) 場合は、結果が合うことが保証されます。
wcstombs はワイド文字の空白文字 count が発生した場合に L'\0) の前に発生した場合、または 8 ビット 0 に変換して停止します。 したがって、mbstr のマルチバイト文字列は wcstombs が変換中にワイド文字の空白文字を検出したときにのみ null で終わるです。 wcstr と mbstr が指す文字列が重なり合う場合、wcstombs 関数の動作は未定義です。
mbstr の引数が NULLの場合、wcstombs はコピー先文字列のバイトの必要なサイズを返します。
wcstombs はそのパラメーターを検証します。 wcstr が NULLであるか、または count がINT_MAXを超える場合、この関数は パラメーターの検証 "に説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続 EINVAL と戻りに関数を設定 errno -1。
wcstombs は、すべてのロケールに依存する動作に現在のロケールを使用して; _wcstombs_l は同じですが、渡されたロケールを代わりに使用します。 詳細については、「ロケール」を参照してください。
C++ では、これらの関数にテンプレートのオーバーロードがあります。このオーバーロードは、これらの関数に対応するセキュリティで保護された新しい関数を呼び出します。 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
wcstombs |
<stdlib.h> |
_wcstombs_l |
<stdlib.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
次のプログラムは、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);
}
同等の .NET Framework 関数
使用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。