다음을 통해 공유


문자열의 문자를 추가합니다. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. 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의 모든 문자를 추가합니다. countstrSource의 길이보다 크면 strSource의 길이가 count 대신 사용됩니다. 모든 경우 결과 문자열은 null 문자로 종료됩니다. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.

Important

strncatstrDest에 공간이 충분한지 확인하지 않습니다. 이는 버퍼 오버런의 잠재적 원인이 될 수 있습니다. count는 추가되는 문자 수를 제한하며 strDest의 크기를 제한하지는 않습니다. 아래 예제를 참조하세요. 자세한 내용은 버퍼 오버런 방지를 참조하세요.

wcsncat_mbsncatstrncat의 와이드 문자 및 멀티바이트 문자 버전입니다. 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로 인해 버퍼 오버런이 발생했음을 알 수 있습니다.

참고 항목

문자열 조작
_mbsnbcat: _mbsnbcat_l









Locale
멀티바이트 문자 시퀀스 해석