Namespaces
Variants

wcsncat, wcsncat_s

cppreference.net에서
< c | string | wide
헤더에 정의됨 <wchar.h>
wchar_t* wcsncat( wchar_t* dest, const wchar_t* src, size_t count );
(1) (C95부터)
(C99까지)
wchar_t* wcsncat( wchar_t* restrict dest,
                  const wchar_t* restrict src, size_t count );
(C99부터)
errno_t wcsncat_s( wchar_t* restrict dest, rsize_t destsz,
                   const wchar_t* restrict src, rsize_t count );
(2) (C11부터)
1) count가리키는 와이드 문자열에서 최대 src개의 와이드 문자를 (널 종결자가 복사되면 중지) dest가 가리키는 문자 문자열의 끝에 추가한다. 와이드 문자 src[0]가 dest의 끝에 있는 널 종결자를 대체한다. 마지막에는 항상 널 종결자가 추가된다 (따라서 함수가 쓸 수 있는 최대 와이드 문자 수는 count + 1이다).
대상 배열이 src와 dest의 내용과 종결 널 와이드 문자를 담을 만큼 크지 않은 경우 동작이 정의되지 않는다.
문자열이 겹치는 경우 동작이 정의되지 않는다.
2) (1)과 동일하나, 이 함수는 대상 배열의 나머지 부분을 (마지막으로 쓴 와이드 문자부터 destsz까지) 덮어쓸 수 있으며, 다음 오류들이 런타임에 감지되어 현재 설치된 제약 조건 핸들러 함수를 호출한다는 점이 다르다:
  • src 또는 dest이 널 포인터인 경우
  • destsz 또는 count이 0이거나 RSIZE_MAX / sizeof(wchar_t)
  • 보다 큰 경우
  • destsz의 첫 번째 dest개의 와이드 문자에 널 와이드 문자가 없는 경우
  • 자름(truncation)이 발생하는 경우: count 또는 src의 길이 중 더 작은 값이 dest의 널 종결자와 destsz 사이의 사용 가능한 공간을 초과한다.
  • 원본과 대상 문자열 사이에 겹침이 발생하는 경우
다른 경계 검사 함수들과 마찬가지로, wcsncat_s는 구현이 __STDC_LIB_EXT1__를 정의하고 사용자가 __STDC_WANT_LIB_EXT1__을 정수 상수 1로 정의한 후 <wchar.h>를 포함하는 경우에만 보장된다.

매개변수

dest - 추가할 널 종료 와이드 문자열을 가리키는 포인터
src - 복사할 널 종료 와이드 문자열을 가리키는 포인터
count - 복사할 최대 와이드 문자 수
destsz - 대상 버퍼의 크기

반환값

1) dest의 복사본을 반환한다.
2) 성공 시 0을 반환하고, 오류 시 0이 아닌 값을 반환한다. 또한 오류 시 L'\0'을 dest[0]에 쓴다 (단, dest이 널 포인터이거나 destsz이 0이거나 RSIZE_MAX / sizeof(wchar_t)보다 큰 경우 제외).

참고

대상 버퍼에 맞추기 위한 자름(truncation)은 보안 위험이므로 wcsncat_s의 런타임 제약 조건 위반이지만, count을 대상 배열 크기에서 1을 뺀 값과 같게 지정하면 자름 동작을 얻을 수 있다: 첫 번째 count개의 와이드 문자를 복사하고 항상 널 종결자를 추가한다:

size_t count = sizeof dst / sizeof *dst;
wcsncat_s(dst, count, src, count - wcsnlen_s(dst, count) - 1);

예제

#include <locale.h>
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
    wchar_t str[50] = L"Земля, прощай.";
    wcsncat(str, L" ", 1);
    wcsncat(str, L"В добрый путь.", 8); // only append the first 8 wide chars
    setlocale(LC_ALL, "en_US.utf8");
    printf("%ls", str);
}

가능한 출력:

Земля, прощай. В добрый

참조

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.31.4.3.2 The wcsncat function (p: 439)
  • K.3.9.3.2.2 The wcsncat_s function (p: 666)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.29.4.3.2 The wcsncat function (p: 315)
  • K.3.9.2.2.2 The wcsncat_s function (p: 466-467)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.29.4.3.2 The wcsncat function (p: 432-433)
  • K.3.9.2.2.2 The wcsncat_s function (p: 643-644)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.24.4.3.2 The wcsncat function (p: 378-379)

같이 보기

(C95)(C11)
하나의 와이드 문자열의 복사본을 다른 문자열에 추가한다
(함수)
두 문자열의 일정 개수의 문자를 연결한다
(함수)
(C95)(C11)
하나의 와이드 문자열을 다른 문자열로 복사한다
(함수)