Share via


_mbccpy_s、_mbccpy_s_l

更新 : 2007 年 11 月

文字列の単一のマルチバイト文字を他の文字列にコピーします。これらの関数は、「CRT のセキュリティ強化」に説明されているように、_mbccpy、_mbccpy_l のセキュリティが強化されたバージョンです。

errno_t _mbccpy_s(
   unsigned char *dest,
   size_t buffSizeInBytes,
   int * pCopied,
   const unsigned char *src 
);
errno_t _mbccpy_s_l(
   unsigned char *dest,
   size_t buffSizeInBytes,
   int * pCopied,
   const unsigned char *src,
   locale_t locale
);
template <size_t size>
errno_t _mbccpy_s(
   unsigned char (&dest)[size],
   int * pCopied,
   const unsigned char *src 
); // C++ only
template <size_t size>
errno_t _mbccpy_s_l(
   unsigned char (&dest)[size],
   int * pCopied,
   const unsigned char *src,
   locale_t locale
); // C++ only

パラメータ

  • [出力] dest
    コピー先。

  • [入力] buffSizeInBytes
    コピー先のバッファのサイズ。

  • [出力] pCopied
    コピーされたバイト数が格納されます (正常終了した場合は 1 または 2)。バイト数を考慮しない場合は、NULL を渡します。

  • [入力] src
    コピーするマルチバイト文字。

  • [入力] locale
    使用するロケール。

戻り値

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。src または dest が NULL の場合、あるいは buffSizeinBytes の値を超えるバイト数を dest にコピーしようとした場合、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、関数は EINVAL を返し、errno が EINVAL に設定されます。

解説

_mbccpy_s 関数は、src から dest に、マルチバイト文字を 1 文字コピーします。_ismbblead への暗黙の呼び出しによって、src がマルチバイト文字の先行バイトを指していないと判断された場合、src が指している 1 バイトがコピーされます。src が先行バイトを指しているが、後続のバイトが 0 であるため無効となる場合は、dest に 0 がコピーされ、errno が EILSEQ に設定されて、関数から EILSEQ が返されます。

_mbccpy_s 関数は null 終端文字を追加しません。ただし、src が null 文字を指している場合は、その null が dest にコピーされます (単なる通常の 1 バイトのコピー)。

pCopied の値には、コピーされたバイト数が格納されます。操作が正常に終了した場合は、1 と 2 のどちらかの値となります。NULL が渡されると、このパラメータは無視されます。

src

dest へのコピー対象

pCopied

戻り値

先行バイト以外

先行バイト以外

1

0

0

0

1

0

後続が 0 以外の先行バイト

後続が 0 以外の先行バイト

2

0

後続が 0 以外の先行バイト

0

1

EILSEQ

2 行目は、単に 1 行目の特殊なケースです。また、この表では buffSizeInBytes >= pCopied を前提としています。

_mbccpy_s は、すべてのロケールに依存する動作に現在のロケールを使用します。_mbccpy_s_l は、_mbccpy_s_l がすべてのロケールに依存する動作に関して渡されたロケールを使用することを除いて _mbccpy_s と同じです。

C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファ長を自動的に推論できるため、サイズの引数を指定する必要がなくなります。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。

汎用テキスト ルーチンのマップ

Tchar.h のルーチン

_UNICODE および _MBCS が未定義の場合

_MBCS が定義されている場合

_UNICODE が定義されている場合

_tccpy_s

マクロまたはインライン関数に割り当てる。

_mbccpy_s

マクロまたはインライン関数に割り当てる。

必要条件

ルーチン

必須ヘッダー

_mbccpy_s

<mbctype.h>

_mbccpy_s_l

<mbctype.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

参照

参照

ロケール

マルチバイト文字のシーケンスの解釈

_mbclen、mblen、_mblen_l