Namespaces
Variants

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):

(C95)
(C11)
(C95)
(C11)
strcpy_s
(C11)
wcscpy 用