wcscpy, wcscpy_s
ja.cppreference.net より
| ヘッダ <wchar.h>
|
||
wchar_t* wcscpy( wchar_t* dest, const wchar_t* src );
|
で定義されます。 (1) | (C95 から) (C99 まで) |
wchar_t* wcscpy( wchar_t* restrict dest, const wchar_t* restrict src );
|
(C99 から) | |
errno_t wcscpy_s( wchar_t* restrict dest, rsize_t destsz,
const wchar_t* restrict src );
|
(2) | (C11 から) |
1)
src が指すワイド文字列(終端のナルワイド文字を含む)を dest が指すワイド文字配列にコピーします。 dest 配列が十分な大きさでない場合の動作は未定義です。 文字列が重なっている場合の動作は未定義です。2) (1) と同じですが、コピー先配列の残りの部分を不特定の値で上書きする可能性がある点、および以下のエラーが実行時に検出され、現在インストールされている 制約ハンドラ 関数を呼び出す点が異なります:
srcまたはdestがヌルポインタであるdestszが 0 またはRSIZE_MAX / sizeof(wchar_t)destszより大きいwcsnlen_s(src, destsz)が- 以下である、つまり切り捨てが発生する
- コピー元とコピー先の文字列の間で重なりが発生する
wcscpy_sすべての境界チェック付き関数と同様に、__STDC_LIB_EXT1__が実装によって定義されており、かつユーザーが__STDC_WANT_LIB_EXT1__を整数定数1に定義してから <wchar.h> をインクルードした場合にのみ、
関連項目
| 引数 | dest | - |
| コピー先のワイド文字配列へのポインタ | src | - |
| コピー元のナル終端ワイド文字列へのポインタ | destsz | - |
書き込む最大文字数。通常はコピー先バッファのサイズ
戻り値1)
dest のコピーを返します。
L'\0'2)dest[0] 成功した場合は 0 を返し、エラーの場合は 0 以外を返します。また、エラー時には dest に destsz を書き込みます(ただし、RMAX_SIZE / sizeof(wchar_t) がヌルポインタであるか、が 0 または
より大きい場合を除く)。
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main(void)
{
wchar_t* src = L"犬 means dog";
// src[0] = L'狗' ; // this would be undefined behavior
wchar_t dst[wcslen(src) + 1]; // +1 for the null terminator
wcscpy(dst, src);
dst[0] = L'狗'; // OK
setlocale(LC_ALL, "en_US.utf8");
printf("src = %ls\ndst = %ls\n", src, dst);
}
例
src = 犬 means dog
dst = 狗 means dog
このコードを実行する
- 出力:
- 参考文献
- C23 規格 (ISO/IEC 9899:2024):
- 7.31.4.2.1 wcscpy 関数 (p: 438)
- K.3.9.3.1.1 wcscpy_s 関数 (p: 663)
- C17 規格 (ISO/IEC 9899:2018):
- 7.29.4.1.2 wcscpy 関数 (p: TBD)
- K.3.9.2.1.1 wcscpy_s 関数 (p: TBD)
- C11 規格 (ISO/IEC 9899:2011):
- 7.29.4.1.2 wcscpy 関数 (p: 430)
- K.3.9.2.1.1 wcscpy_s 関数 (p: 639)
C99 規格 (ISO/IEC 9899:1999):
wcsncpywcsncpy_s |
(C95) (C11) |
wmemcpywmemcpy_s |
(C95) (C11) |
| strcpy_s (C11) | |
ある文字列を別の文字列にコピーする (関数)C++ ドキュメント
| |