strcat, strncat 문자열 합치기


strcat strncat 문자열 합치기


이번에는 문자열 합치기에 대해서 알아보겠다.

strcat strncat 함수가 있는데 이 함수를 사용하기 위해서는 string.h 헤더 파일을 include 해줘야 한다.

사용법은 이러하다.


1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <string.h>
main()
{
    char array1[10= "Good";
    char array2[10= "Look";
    strcat_s(array1, sizeof(array1), array2);
    puts(array1);
}
cs

< 출력 >
GoodLock

먼저 함수를 사용하기 위해 string.h 파일을 include 해주고
각 배열에 데이트를 넣어줬다. 그리고 strcat(받을 문자열, 대상 문자열의 버퍼 크기, 붙일 문자열)을 이용해서
데이터를 합쳐줬다. 그럼 strncat 사용법을 알아보자.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <string.h>
main()
{
    char array1[10= "Good";
    char array2[10= "Look";
    strncat_s(array1, sizeof(array1), array2, 3);
    puts(array1);
}
cs

< 출력 >
GoodLoo

사용법은 strcat와 거의 같다고 볼 수 있다. 마지막에 데이터 합칠 개수만 입력해주면 된다.
그럼 이런 함수가 어떻게 동작을 하는지 함수의 원형을 한번 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
char* strcat_my(char *dest, size_t n, char *src)
{
    if (n < sizeof(src))
        return 0;
    while (*dest)
        dest++;
    while (*src) {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
    return dest;
}
main()
{
    char array1[10= "Good";
    char array2[10= "Look";
    strcat_my(array1, sizeof(array1), array2);
    puts(array1);
}
cs

반환형은 char*이다. 그리고 인자 값 2번째를 보면 size_t n을 받아들이고 있다.
만약 n이 복사할 데이터의 변숫값보다 크면 0을 리턴하기로 했다.
왜냐?? 10 바이트만큼 데이터가 있는데 그것보다 크면 데이터가 안 들어가니까!
그리고 while(*dest)로 문자열의 끝부분(NULL) 부분을 찾아주고
while(*src)로 src가 NULL 부분을 찾을 때까지 반복문을 돌려주는데
dest는 지금 문자열의 끝(NULL) 부분을 가리키고 있다. 그래서 끝부분에 *src 값을 넣어준다.
그리고 dest++, src++을 해준다.
그리고 마지막에 dest 끝부분에 '\0'을 넣어준다. 그리고 dest를 넘겨준다.

그럼 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
#include <stdio.h>
char* strcat_my(char *dest, size_t n, char *src, size_t maxlen)
{
    if (n < sizeof(src))
        return 0;
    n = 0;
    while (*dest)
        dest++;
    while (*src) {
        *dest = *src;
        dest++,    src++, n++;
        if (n == maxlen)
            break;
    }
    *dest = '\0';
    return dest;
}
main()
{
    char array1[10= "Good";
    char array2[10= "Look";
    strcat_my(array1, sizeof(array1), array2, 3);
    puts(array1);
}
cs


strcat_s 코드와 거의 비슷하다. 추가된 내용은 인자 값 4번째에 maxlen을 추가한 것이고
n 변수를 재활용해서 n이 maxlen 값이랑 같다면 반복문을 끝낸다.
이런 게 추가가 됐다.

댓글

Designed by JB FACTORY