[C언어,C++] 문자열 합치기 strcat, strncat 함수 사용법 & 예제 +구현

strcat와 strncat 함수는 두 문자열을 이어 붙여주는 기능을 합니다. 첫 번째 주소에 저장된 문자열에 두 번째 주소에 저장된 문자열을 붙여서 반환합니다. 두 함수는 문자열을 이어 붙인다는 형태는 동일하며 strncat는 일정 길이만큼 추가할 수 있는 옵션이 추가된 함수입니다. 위의 두 함수는 널로 끝나는 스트링에서 작동합니다. 그렇기에 함수에 대한 스트링 인수는 스트링 끝을 나타내는 널 문자(\0)를 포함해야 합니다.

 

strcat() :문자열A에 원하는 문자열B를 문자열A 뒤쪽에 이어 붙이는 함수

strncat() :문자열A에 원하는 문자열B의 n개를 문자열A 뒤쪽에 이어 붙이는 함수

 

문자열 붙이기

strcat(s2, s1)과 같이 strcat 함수에 최종 결과가 나올 문자열과 붙일 문자열을 넣습니다. 위의 경우 s2 뒤에 s1를 붙여서 Helloworld가 나옵니다. 여기서 주의할 부분은 최종 결과가 나올 문자열의 배열의 크기가 충분히 커야 한다는 점입니다. 만약 크기가 충분히 크지 않다면 Overflow가 발생합니다.

 

※ 요즘은 자동으로 배열의 크기를 늘려주는 것 같기는 하지만 그래도 만일의 사태를 대비하여 배열의 크기를 넉넉히 잡아주는것을 권장합니다.

 

strcat, strncat 함수 형식

char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t num);

dest : 복사를 받을 대상의 시작 주소
src : 복사를 할 원본의 시작 주소
num : 복사를 할 문자의 개수

 

※ size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입으로 반드시 unsigned 형으로 나타냅니다.

 

strcat, strncat 함수 사용 예제

#include <string.h>
#include <stdio.h> //함수가 선언된 헤더 파일
//#include <cstring> //C++ 일 경우

int main()
{
    /* str1의 여유 크기가 str2 문자열을 담을수 있어야 한다.*/
    char str1[10] = "abc";
    char str2[] = "def";
    char str3[] = "ghi";
    
    /*strcat*/
    strcat(str1, str2);
    printf("strcat : %s\n", str1);
    
    /*strcat*/
    strncat(str1, str3,2); //2개까지 붙이기
    printf("strncat : %s\n", str1);
    
    return 0;
}

예제1

strcat의 사용 결과 str1에 있는 "abc"의 값에 str2인 "def"가 합쳐져 "abcdef"라는 결과값이 도출되었고 strncat의 사용 결과 abcdef에 str3의 2번째 자리까지의 문자열이 추가되어 "abcdefgh"라는 결과값이 도출되었습니다.

 

strcat, strncat 함수 구현

#include <stdio.h>

//strcat 구현
char *my_strcat(char *d, const char *s)
{
    char *p = d;
    while(*d) d++;
    while(*s) *d++ = *s++;
    *d = '\0';
    return p;
}

//strncat 구현
char *my_strncat(char *d, const char *s, size_t sz)
{
    char *p = d;
    while(*d) d++;
    while(*s && sz-- > 0) *d++ = *s++;
    *d = '\0';
    return p;
}

int main()
{
    /* str1의 여유 크기가 str2 문자열을 담을수 있어야 한다.*/
    char str1[10] = "abc";
    char str2[] = "def";
    char str3[] = "ghi";
    
    //strcat
    my_strcat(str1, str2);
    printf("strcat : %s\n", str1);
	
    //strcat
    my_strncat(str1, str3,2); //2개까지 붙이기
    printf("strncat : %s\n", str1);
    
    return 0;
}

예제2

댓글

Designed by JB FACTORY