Namespaces
Variants

wcscpy, wcscpy_s

From cppreference.net
< c ‎ | string ‎ | wide
定義先ヘッダ <wchar.h>
(1)
wchar_t * wcscpy ( wchar_t * dest, const wchar_t * src ) ;
(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) と同様ですが、宛先配列の残りの部分を未規定の値で上書きする可能性があり、以下のエラーが実行時に検出され、現在設定されている constraint handler 関数を呼び出す点が異なります:
  • src または dest がnullポインタである場合
  • destsz がゼロまたは RSIZE_MAX / sizeof ( wchar_t ) より大きい場合
  • destsz wcsnlen_s ( src, destsz ) 以下である場合(つまり切り捨てが発生する場合)
  • ソース文字列と宛先文字列の間にオーバーラップが発生する場合
すべての境界チェック付き関数と同様に、 wcscpy_s は、実装によって __STDC_LIB_EXT1__ が定義されており、かつユーザーが <wchar.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ利用可能であることが保証されます。

目次

パラメータ

dest - コピー先のワイド文字配列へのポインタ
src - コピー元のヌル終端ワイド文字列へのポインタ
destsz - 書き込む最大文字数(通常は宛先バッファのサイズ)

戻り値

1) dest のコピーを返す
2) 成功時はゼロを返し、エラー時は非ゼロを返します。また、エラー時には L ' \0 ' dest [ 0 ] に書き込みます(ただし dest がnullポインタの場合、または destsz がゼロまたは RMAX_SIZE / sizeof ( wchar_t ) より大きい場合を除く)。

#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.29.4.1.2 wcscpy関数 (p: TBD)
  • K.3.9.2.1.1 wcscpy_s関数 (p: TBD)
  • 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):
  • 7.24.4.1.2 wcscpy関数 (p: 376)

関連項目

ワイド文字列から別のワイド文字列へ、指定された数のワイド文字をコピーする
(関数)
重複しない2つの配列間で、指定された数のワイド文字をコピーする
(関数)
文字列を別の文字列にコピーする
(関数)