이름

strcat, strncat – 두 문자열 연결하기

개요

#include < string.h >

char * strcat (char * dest , const char * src );

char * strncat (char * dest , const char * src , size_t n );

기술

strcat () 함수는 src 문자열을 dest 문자열에 추가하여 dest 끝의 null 바이트 ( ‘\ 0’)를 덮어 쓴 다음 종료 null 바이트를 추가합니다. 문자열은 겹치지 않을 수 있으며 dest 문자열에는 결과에 충분한 공간이 있어야합니다. dest 가 충분히 크지 않으면 프로그램 동작을 예측할 수 없습니다. 버퍼 오버런은 안전한 프로그램을 공격하기위한 가장 좋은 방법입니다 .

strncat () 함수는 다음과 같은 점을 제외하고는 비슷합니다.

*

그것은 src 로부터 최대 n 바이트를 사용합니다; 과

*

src에 n 바이트 이상이 포함되어 있으면 null 종료되지 않아도됩니다.

strcat ()에서와 같이 dest 의 결과 문자열은 항상 null로 끝납니다.

srcn 개 이상의 바이트가 포함되어 있으면 strncat ()은 n + 1 바이트를 dest ( nsrc 와 null 종료 바이트)에 씁니다. 따라서 dest 의 크기는 적어도 strlen (dest) + n + 1 이어야합니다.

strncat ()의 간단한 구현은 다음과 같습니다.

숯*
strncat (char * dest, const char * src, size_t n)
{
size_t dest_len = strlen (dest);
size_t i;

for (i = 0; i dest [dest_len + i] = src [i];
dest [dest_len + i] = ‘\ 0’;

목적지를 되돌려 라.
}

반환 값

strcat () 및 strncat () 함수는 결과 문자열 dest에 대한 포인터를 반환합니다.

준수

SVr4, 4.3BSD, C89, C99.

노트

일부 시스템 (BSD, Solaris 및 기타)은 다음과 같은 기능을 제공합니다.

size_t strlcat (char * dest, const char * src, size_t size);

이 함수는 size가 strlen (dest) 보다 작은 경우를 제외 하고는 src 에서 문자열 size에 null 종료 문자열 src 를 추가하고 src 에서 최대 size-strlen (dest) -1 을 복사 다음 결과에 null 종결자를 추가합니다. 이 함수는 strcat ()의 버퍼 오버런 문제를 해결하지만 크기 가 너무 작 으면 호출자가 데이터 손실 가능성을 처리해야합니다. 이 함수는 strlcat ()이 생성하려고 시도한 문자열의 길이를 반환합니다. 반환 값이 크기 보다 크거나 같으면 데이터 손실이 발생합니다. 데이터 손실이 중요한 경우 호출자 호출 전에 인수를 확인하거나 함수 반환 값을 테스트해야합니다. strlcat ()은 glibc에는 존재하지 않고 POSIX에 의해 표준화되지도 않았지만, libbsd 라이브러리를 통해 리눅스에서 사용 가능합니다.

참고 사항

memcpy (3), memcpy (3), strcpy (3), string (3), strncpy (3), wcscat (3), wcsncat (3)

참조 인

concatname (3), feature_test_macros (7), nameindex (3)