wcsncat, wcsncat_s
cppreference.net에서
| 헤더에 정의됨 <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) |
하나의 와이드 문자열의 복사본을 다른 문자열에 추가한다 (함수) |
(C11) |
두 문자열의 일정 개수의 문자를 연결한다 (함수) |
(C95)(C11) |
하나의 와이드 문자열을 다른 문자열로 복사한다 (함수) |
wcsncat에 대한 C++ 문서 wcsncat
| |