wmemcpy, wmemcpy_s
From cppreference.com
| ヘッダー <wchar.h> で定義 |
||
| (1) | ||
| wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count ); |
(C95 以降) (C99まで) |
|
| wchar_t *wmemcpy(wchar_t *restrict dest, const wchar_t *restrict src, size_t count ); |
(C99以降) | |
| errno_t wmemcpy_s( wchar_t *restrict dest, rsize_t destsz, const wchar_t *restrict src, rsize_t count ); |
(2) | (C11 以降) |
1)
srcが指すワイド文字配列から、destが指すワイド文字配列へ、count個の連続するワイド文字を正確にコピーします。オブジェクトが重なる場合、動作は未定義です。countがゼロの場合、関数は何も行いません。2) (1)と同様ですが、以下のエラーが実行時に検出され、現在インストールされている制約ハンドラ関数が呼び出されます。
- `src` または `dest` がヌルポインタである場合
-
destszまたはcountが RSIZE_MAX/sizeof(wchar_t) より大きい -
countがdestszより大きい(オーバーフローが発生する) - ソース配列とデスティネーション配列の間で重複が発生する
- すべての境界チェック関数と同様に、
wmemcpy_sは、実装によって __STDC_LIB_EXT1__ が定義され、ユーザーが <wchar.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ利用可能です。
目次 |
[編集] パラメーター
| dest | - | コピー先のワイド文字配列へのポインタ |
| src | - | コピー元のワイド文字配列へのポインタ |
| count | - | コピーするワイド文字の数 |
| destsz | - | 書き込むワイド文字の最大数(宛先バッファのサイズ) |
[編集] 戻り値
1) `dest` のコピーを返します。
2) 成功した場合はゼロを返し、エラーの場合はゼロ以外の値を返します。また、エラー時には、
dst の全体を dst+dstsz を含まない範囲まで、ヌルワイド文字 L'\0' で埋めます(ただし、dest がヌルであるか、destsz が RSIZE_MAX/sizeof(wchar_t) より大きい場合を除く)。[編集] 備考
この関数のバイト文字列に対する対応は strncpy であり、strcpy ではありません。
この関数はロケールに依存せず、コピーする wchar_t オブジェクトの値には注意を払いません。ヌル文字や不正な文字もコピーされます。
[編集] 例
このコードを実行
#include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { wchar_t from1[] = L"नमस्ते"; size_t sz1 = sizeof from1 / sizeof *from1; wchar_t from2[] = L"Բարև"; size_t sz2 = sizeof from2 / sizeof *from2; wchar_t to[sz1 + sz2]; wmemcpy(to, from1, sz1); // copy from1, along with its null terminator wmemcpy(to + sz1, from2, sz2); // append from2, along with its null terminator setlocale(LC_ALL, "en_US.utf8"); printf("Wide array contains: "); for(size_t n = 0; n < sizeof to / sizeof *to; ++n) if(to[n]) printf("%lc", to[n]); else printf("\\0"); printf("\n"); }
実行結果の例
Wide array contains: नमस्ते\0Բարև\0
[編集] 参照
- C11標準 (ISO/IEC 9899:2011)
- 7.29.4.2.3 wmemcpy 関数 (p: 431)
- K.3.9.2.1.3 wmemcpy_s 関数 (p: 641)
- C99標準 (ISO/IEC 9899:1999)
- 7.24.4.2.3 wmemcpy 関数 (p: 377)
[編集] 関連項目
| (C95)(C11) |
オーバーラップしている可能性のある2つの配列間で、指定された数のワイド文字をコピーする (関数) |
| (C11) |
ある文字列から別の文字列に指定された文字数をコピーする (関数) |
| C++ ドキュメント: wmemcpy
| |