문자열의 문자를 추가합니다. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. strncat_s
, _strncat_s_l
, wcsncat_s
, _wcsncat_s_l
, _mbsncat_s
, _mbsncat_s_l
을 참조하세요.
Important
_mbsncat
및 _mbsncat_l
은 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다. 자세한 내용은 유니버설 Windows 플랫폼 앱에서 지원되지 않는 CRT 함수를 참조하세요.
구문
char *strncat(
char *strDest,
const char *strSource,
size_t count
);
wchar_t *wcsncat(
wchar_t *strDest,
const wchar_t *strSource,
size_t count
);
unsigned char *_mbsncat(
unsigned char *strDest,
const unsigned char *strSource,
size_t count
);
unsigned char *_mbsncat_l(
unsigned char *strDest,
const unsigned char *strSource,
size_t count,
_locale_t locale
);
template <size_t size>
char *strncat(
char (&strDest)[size],
const char *strSource,
size_t count
); // C++ only
template <size_t size>
wchar_t *wcsncat(
wchar_t (&strDest)[size],
const wchar_t *strSource,
size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat(
unsigned char (&strDest)[size],
const unsigned char *strSource,
size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat_l(
unsigned char (&strDest)[size],
const unsigned char *strSource,
size_t count,
_locale_t locale
); // C++ only
매개 변수
strDest
Null 종료 대상 문자열입니다.
strSource
Null 종료 소스 문자열입니다.
count
추가할 문자 수입니다.
locale
사용할 로캘입니다.
반환 값
대상 문자열에 대한 포인터를 반환합니다. 반환 값 없음은 오류를 나타내는 데 예약되어 있습니다.
설명
strncat
함수는 strSource
의 최대 첫 count
자를 strDest
에 추가합니다. strSource
의 초기 문자가 strDest
의 종료 null 문자를 덮어씁니다. count
자가 추가되기 전에 strSource
에 null 문자가 나타나는 경우 strncat
는 null 문자 위치까지 strSource
의 모든 문자를 추가합니다. count
가 strSource
의 길이보다 크면 strSource
의 길이가 count
대신 사용됩니다. 모든 경우 결과 문자열은 null 문자로 종료됩니다. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.
Important
strncat
는 strDest
에 공간이 충분한지 확인하지 않습니다. 이는 버퍼 오버런의 잠재적 원인이 될 수 있습니다. count
는 추가되는 문자 수를 제한하며 strDest
의 크기를 제한하지는 않습니다. 아래 예제를 참조하세요. 자세한 내용은 버퍼 오버런 방지를 참조하세요.
wcsncat
및 _mbsncat
는 strncat
의 와이드 문자 및 멀티바이트 문자 버전입니다. wcsncat
의 문자열 인수와 반환 값은 와이드 문자 문자열입니다. _mbsncat
의 문자열 인수와 반환 값은 멀티바이트 문자 문자열입니다. 그렇지 않으면 이들 세 함수는 동일하게 작동합니다.
출력 값은 로캘의 LC_CTYPE
범주 설정에 영향을 받습니다. 자세한 내용은 setlocale
를 참조하세요. _l
접미사가 없는 이러한 함수의 버전은 이 로캘 종속 동작에 현재 로캘을 사용합니다. _l
접미사가 붙은 버전은 대신 전달된 로캘 매개 변수를 사용한다는 점만 제외하면 동일합니다. 자세한 내용은 Locale을 참조하세요.
C++에서 이러한 함수에는 템플릿 오버로드가 있습니다. 자세한 내용은 안전한 템플릿 오버로드를 참조하세요.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
일반 텍스트 루틴 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
정의된 _MBCS |
정의된 _UNICODE |
---|---|---|---|
_tcsncat |
strncat |
_mbsnbcat |
wcsncat |
_tcsncat_l |
_strncat_l |
_mbsnbcat_l |
_wcsncat_l |
참고 항목
_strncat_l
및 _wcsncat_l
은 로캘에 종속되지 않으며 직접 호출할 수 없습니다. 이 두 항목은 _tcsncat_l
내부에서 사용하도록 제공됩니다.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
strncat |
<string.h> |
wcsncat |
<string.h> 또는 <wchar.h> |
_mbsncat |
<mbstring.h> |
_mbsncat_l |
<mbstring.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_strncat.c
// Use strcat and strncat to append to a string.
#include <stdlib.h>
#define MAXSTRINGLEN 39
char string[MAXSTRINGLEN+1];
// or char *string = malloc(MAXSTRINGLEN+1);
void BadAppend( char suffix[], int n )
{
strncat( string, suffix, n );
}
void GoodAppend( char suffix[], size_t n )
{
strncat( string, suffix, __min( n, MAXSTRINGLEN-strlen(string)) );
}
int main( void )
{
string[0] = '\0';
printf( "string can hold up to %d characters\n", MAXSTRINGLEN );
strcpy( string, "This is the initial string!" );
// concatenate up to 20 characters...
BadAppend( "Extra text to add to the string...", 20 );
printf( "After BadAppend : %s (%d chars)\n", string, strlen(string) );
strcpy( string, "This is the initial string!" );
// concatenate up to 20 characters...
GoodAppend( "Extra text to add to the string...", 20 );
printf( "After GoodAppend: %s (%d chars)\n", string, strlen(string) );
}
출력
string can hold up to 39 characters
After BadAppend : This is the initial string!Extra text to add to (47 chars)
After GoodAppend: This is the initial string!Extra text t (39 chars)
BadAppend
로 인해 버퍼 오버런이 발생했음을 알 수 있습니다.