<개인공부>/[C언어, C++]

[C언어/C++] strcat, strncat 문자열 연결 함수에 대해서

BlockDMask 2019. 5. 24. 21:05
반응형

안녕하시죠? BlockDMask 입니다.

오늘은 문자열을 이어붙이는, 문자열 연결함수에 대해서 알아볼 것 입니다.

C/C++ 에서 char*, char[] 타입의 문자열을 이어 붙이기 위해서는 strcat, strncat 함수를 사용하게 됩니다.

이 두함수를 이용해서 어떤식으로 문자열을 이어 붙이는지 한번 알아 보겠습니다.

그럼 GOGO!


C언어 strcpy, strncpy 함수 : 문자열 복사 [바로가기]

C언어 puts, gets 함수 : 문자열 입출력 [바로가기]

C언어 getchar,putchar 함수 : 문자 입출력  [바로가기]

C++ string에 대해서 궁금하다면 전부를 보여드리겠습니다. [바로가기]


<목차>

1. strcat, strncat 함수 원형과 헤더파일 및 간단 사용법, 주의사항

2. strcat, strncat 함수 예시


1. strcat, strncat 함수 원형과 헤더파일 및 사용법, 주의사항

헤더파일 : <string.h>    //C++ : <cstring>


strcat 함수란?

함수 원형 : char* strcat(char* dest, const char* origin);


1) origin에 있는 문자열을 dest 뒤쪽에 이어 붙이는 함수 입니다.

2) dest 문자열 끝에 있는 '\0' 이것은 사라지고 그 위치에 origin이 바로 붙어버리는게 특징입니다.

3) strcat 간단한 사용법 

char origin[] = "BlockDMask";

char dest[20] = "aaabbb";

strcat(dest, origin);


결과 : "aaabbbBlockDMask";


strncat 함수란?

함수원형 : char* strncat(char* dest, const char* origin, size_t n);


1) origin에 있는 문자열 n개를 문자열 dest 뒤쪽에 이어 붙이는 함수 입니다.

2) dest 문자열 끝을 가리키는 '\0' 기호의 위치에 '\0'을 없애고 origin의 문자 n번째 까지 붙여버리는 함수입니다.

3) strncat 간단한 사용법.

char origin[] = "BlockDMask";

char dest[20] = "aaabbb";

strncat(destorigin, 5);


결과 : "aaabbbBlock";



 strcat, strncat 함수 사용시 꼭 생각해야 할 것들

1) dest 배열의 길이는 origin과 합쳐져도 남을 정도로 충분히 길어야합니다.

2) dest 의 문자열 끝에 있는 '\0'에서 부터 붙여넣는다는 점을 꼭 기억해야합니다.

3) 마지막에 붙여 넣은 문자열 끝에만 '\0' 딱 붙는다는 사실을 생각해야합니다.

4) strncat를 함수를 이용할때, origin에서 n문자만 잘라서 넣어도 합친 문자열 끝에는 '\0'가 붙는다는 사실을 생각해야합니다.


2. strcat, strncat 예시


 strcat 함수 사용 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//[C언어/C++] strcat example. :BlockDMask:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>    //C++ <cstdio>
#include<string.h>    //C++ <cstring>
int main(void)
{
    char origin[] = "BlockDMask";    //"BlockDMask\0" 이므로, 11의 길이;
    char dest1[100= "abcdefg";
    char dest2[10= "abcdefg";        //"abcdefg\0" 이므로, 8의 길이;
 
    //case1 : 넉넉한 dest 배열 뒤에 붙여넣는경우
    strcat(dest1, origin);
 
    //case2 : 넉넉하지 않은 dest 배열 뒤에 넘치게 붙여 넣는 경우.
    //strcat(dest2, origin);    //run time error
            
    printf(" case1 : %s\n", dest1);    //ok
    //printf("case2 : %s\n", dest2);//error.
    return 0;
}
cs

 strcat 예제 결과


: strcat(dest1, origin)의 경우에는 dest1 배열의 길이가 넉넉하게 100이므로 무리없이 문자열을 이어 붙일 수 있었습니다.

: strcat(dest2, origin)의 경우에는 dest2 배열의 길이가 10이므로 abcdefgBlocKDMask는 길이 10을 넘기 때문에 strcat 함수를 이용해서 문자열을 붙이려고 할때, 배열의 길이를 넘게 되어서 프로그램 실행중에 (run time 중) 에러가 나게 됩니다.


 strncat 함수 사용 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//[C언어/C++] strncat example. :BlockDMask:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>    //C++ <cstdio>
#include<string.h>    //C++ <cstring>
 
int main(void)
{
    char origin[] = "BlockDMask";    //"BlockDMask\0" 이므로, 11의 길이;
    char dest1[100= "abcdefg1";
    char dest2[100= "abcdefg2";
    char dest3[10= "abcdefg3";    //"abcdefg3\0" 이므로, 9의 길이;
 
    //case1 : origin 문자열 모두를 이어 붙이는 경우.
    strncat(dest1, origin, sizeof(origin));
 
    //case2 : origin 문자열 5개만 붙여넣는 경우
    strncat(dest2, origin, 5);
 
    //case3 : 넉넉하지 않은 dest 배열 뒤에 넘치게 붙여 넣는 경우.
    //strncat(dest3, origin, 5);    //run time error
 
    printf("strncat case1 : %s\n", dest1);    //ok
    printf("strncat case2 : %s\n", dest2);    //ok
    //printf("strncat case3 : %s\n", dest3);//error
 
    return 0;
}
cs

 strncat 예제 결과

strncat(dest1, origin, sizeof(origin))의 경우처럼 배열의 전체 길이를 이어 붙이고 싶으면 sizeof( )를 이용하면 됩니다.

: strncat(dest2, origin, 5)의 경우처럼 문자열의 일정 길이 만큼만 이어 붙이고 싶으면 세번째 인자 n을 이용하면됩니다. 이어 붙인 문자열 끝에는 '\0'이 붙게 되어 문자열의 끝을 알리게 됩니다.

: strncat(dest3, origin, 5)의 경우처럼 dest 배열의 길이를 넘게 이어 붙이려 하면 런타임 에러(프로그램 실행중에)가 나게 됩니다.


반응형