C언어/string.h

[C언어] strcat 함수 (문자열 연결)

아무일도없었다 2022. 9. 15. 16:56

사용범위

Windows, Unix 등 모든 OS에서 사용 가능한 표준 API 함수

기능

C언어 표준 함수로 문자열에 문자열을 연결할때 사용한다.

헤더

#include <string.h>

※ strcat 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※


함수

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

파라미터

  • char* dest
    • 연결(변경)하려는 target string 버퍼를 입력한다.
    • 반드시 NULL 문자로 종료되어야 한다.
  • const char* source
    • dest 에 연결할 string 을 입력한다.
    • 반드시 NULL 문자로 종료되어야 한다.

반환값 (return)

  dest 에 source 를 연결한 이후 연결된 string 버퍼인 dest 를 반환한다.

잡학지식

strcat(dest, source) 함수에서 dest + source 의 결과가 dest 에 저장되므로 dest 의 버퍼 크기가 확보되어야 한다. [dest 의 string 길이 + source 의 string 길이] 

 

그렇지 않으면 buffer overflow 버그로 인해 예상하지 못한 결과가 나올 수 있다. (sigsegv 라던지 ..)

 

따라서 source 의 string 길이의 최댓값을 예측할 수 없는 경우 strncat 함수 사용을 권장한다.


 

<소스 코드>

#include <stdio.h>
#include <string.h>

#define MAX_BUF_SIZE 128

int main() {
    char buffer1[MAX_BUF_SIZE] = "Hello";
    char buffer2[32] = " strcat !";
    char* ret;

    printf("(Before Data) buffer1[%s] buffer2[%s]\n", buffer1, buffer2);

    ret = strcat(buffer1, buffer2);

    printf("(Address) ret[%p] buffer1[%p]\n", ret, buffer1);

    printf("(After Data) buffer1[%s] buffer[%s]\n", buffer1, buffer2);

    return 0;
}

 

※ 실행 결과

(Before Data) buffer1[Hello] buffer2[ strcat !]
(Address) ret[000000000061FD50] buffer1[000000000061FD50]
(After Data) buffer1[Hello strcat !] buffer[ strcat !]

 

반응형