wmemcpy, wmemcpy_s
From cppreference.net
|
ヘッダーで定義
<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
が指すワイド文字配列から連続する
count
個のワイド文字を、
dest
が指すワイド文字配列に正確にコピーします。オブジェクトが重複している場合、動作は未定義です。
count
がゼロの場合、この関数は何も行いません。
2)
(1)
と同様ですが、以下のエラーが実行時に検出され、現在インストールされている
constraint handler
関数を呼び出す点が異なります:
-
-
srcまたはdestがnullポインタである場合 -
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
まで、ただし含まず)nullワイド文字
L
'
\0
'
で埋める(
dest
がnullの場合、または
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)
|
指定された数のワイド文字を二つの配列間でコピーする(領域が重複している可能性あり)
(関数) |
|
(C11)
|
指定された数の文字をある文字列から別の文字列にコピーする
(関数) |
|
C++ドキュメント
for
wmemcpy
|
|