Namespaces
Variants

wmemcpy, wmemcpy_s

cppreference.net에서
< C | string | wide
헤더에 정의됨 <wchar.h>
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count );
(1) (since C95)
(until C99)
wchar_t* wmemcpy(wchar_t* restrict dest, const wchar_t* restrict src,
                 size_t count );
(since C99)
errno_t wmemcpy_s( wchar_t* restrict dest, rsize_t destsz,
                   const wchar_t* restrict src, rsize_t count );
(2) (since C11)
1) 정확히 count 개의 연속된 와이드 문자를 src가 가리키는 와이드 문자 배열에서 dest가 가리키는 와이드 문자 배열로 복사합니다. 객체가 겹칠 경우 동작이 정의되지 않습니다. count이 0이면 함수는 아무 작업도 수행하지 않습니다.
2) (1)과 동일합니다. 단, 다음 오류가 런타임에 감지되며 현재 설치된 제약 조건 처리기 함수를 호출합니다:
  • src 또는 dest이 널 포인터입니다
  • destsz 또는 count이 RSIZE_MAX / sizeof(wchar_t)
  • count보다 큽니다destsz보다 큽니다 (오버플로우가 발생합니다)
  • 원본 배열과 대상 배열 사이에 겹침이 발생합니다
모든 경계 검사 함수와 마찬가지로, wmemcpy_s는 구현에서 __STDC_LIB_EXT1__가 정의되고 사용자가 __STDC_WANT_LIB_EXT1__를 정수 상수 1로 정의한 후 <wchar.h>를 포함하는 경우에만 사용 가능이 보장됩니다.

매개변수

dest - 복사 대상 와이드 문자 배열을 가리키는 포인터
src - 복사 원본 와이드 문자 배열을 가리키는 포인터
count - 복사할 와이드 문자 개수
destsz - 최대 쓰기 가능 와이드 문자 수 (대상 버퍼의 크기)

반환값

1) dest
의 복사본을 반환합니다2)dest 성공 시 0을 반환하고, 오류 시 0이 아닌 값을 반환합니다. 또한 오류 시 전체 dest + destsz 직전까지 (를 포함하지 않음)를 널 와이드 문자로 채웁니다, L'\0' (단, dest이 널이거나 destsz이 RSIZE_MAX / sizeof(wchar_t)보다 큰 경우는 제외)

참고

이 함수의 바이트 문자열 대응 함수는 strncpy이며, strcpy가 아닙니다.

이 함수는 로캘에 민감하지 않으며 wchar_t객체의 값에 주의하지 않습니다: 널 문자뿐만 아니라 잘못된 문자도 복사됩니다.

예제

#include <locale.h>
#include <stdio.h>
#include <wchar.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

참조

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.29.4.2.3 wmemcpy 함수 (p: TBD)
  • K.3.9.2.1.3 wmemcpy_s 함수 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.29.4.2.3 wmemcpy 함수 (p: TBD)
  • K.3.9.2.1.3 wmemcpy_s 함수 (p: TBD)
  • 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)

같이 보기

두 배열(겹칠 수 있음) 사이에 일정량의 와이드 문자를 복사합니다
(함수)
한 문자열에서 다른 문자열로 일정량의 문자를 복사합니다
(함수)
C++ 문서에 대한 wmemcpy