Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 문자열 라이브러리 함수 총정리: 예제 코드로 배우는 string.h 활용법

C 언어에서 문자열을 다루기 위한 다양한 문자열 라이브러리 함수들이 미리 정의되어 있으며, 이 함수들은 헤더 파일 string.h에 포함되어 있습니다. 이 글에서는 주요 문자열 함수들의 사용법과 실제 동작 예제를 통해 자세히 알아보겠습니다.

C 언어의 주요 문자열 라이브러리 함수 목록

  • strlen() – 문자열 길이 반환
  • strcmp() – 두 문자열 비교
  • strcpy() – 문자열 복사
  • strncmp() – n개의 문자 비교
  • strncpy() – n개의 문자 복사
  • strrev() – 문자열 뒤집기
  • strcat() – 문자열 연결
  • strstr() – 부분 문자열 검색
  • strncat() – n개의 문자 연결

1. strlen() 함수 – 문자열 길이 구하기

strlen() 함수는 문자열에 포함된 문자 개수(길이)를 반환합니다.

문법

int strlen (문자열 이름);

예제

#include <string.h>
main (){
    char a[30] = "Hello";
    int l;
    l = strlen (a);
    printf ("length of the string = %d", l);
    getch ();
}

실행 결과

length of the string = 5

"Hello"는 5개의 문자로 이루어져 있으므로 5가 출력됩니다.

2. strcpy() 함수 – 문자열 복사하기

  • 원본(source) 문자열을 대상(destination) 문자열로 복사합니다.
  • 대상 문자열의 크기는 원본 문자열보다 크거나 같아야 합니다.

문법

strcpy (대상 문자열, 원본 문자열);

주의할 점은 인자의 순서입니다. 첫 번째 인자가 복사될 대상이고, 두 번째 인자가 복사할 원본입니다.

// 잘못된 사용
char a[50];
strcpy ("Hello", a);
→ 오류 발생

// 올바른 사용
char a[50];
strcpy (a, "hello");
→ a = "Hello"

예제

#include <string.h>
main (){
    char a[50], b[50];
    printf ("enter a source string");
    scanf("%s", a);
    printf("enter destination string");
    scanf("%s",b);
    strcpy ( b,a);
    printf ("copied string = %s",b);
    getch ();
}

실행 결과

Enter a source string : Hello
Copied string = Hello

3. strncpy() 함수 – 지정한 개수만큼 복사하기

  • 원본 문자열에서 n개의 문자만 대상 문자열로 복사합니다.
  • 대상 문자열의 크기는 원본 문자열보다 크거나 같아야 합니다.

문법

strncpy (대상 문자열, 원본 문자열, n);

예제

#include<string.h>
main (){
    char a[50], b[50];
    printf ("enter a string");
    gets (a);
    gets(b);
    strncpy (b,a,3);// a 문자열에서 앞의 3개 문자만 복사
    b[3] = '\0';
    printf ("copied string = %s",b);
    getch ();
}

실행 결과

Enter a string : Hello
Copied string = Hel

이처럼 strncpy() 함수는 부분 문자열(substring) 추출 용도로도 활용할 수 있습니다.

4. strcat() 함수 – 문자열 연결하기

  • 두 개의 문자열을 하나로 합칩니다(연결).
  • 대상 문자열의 길이는 원본 문자열보다 커야 합니다.

문법

strcat (대상 문자열, 원본 문자열);

예제

#include <string.h>
main(){
    char a[50] = "Hello";
    char b[20] = "Good Morning";
    clrscr ();
    strcat (a,b);
    printf("concatenated string = %s", a);
    getch ();
}

실행 결과

Concatenated string = Hello Good Morning

5. strncat() 함수 – 지정한 개수만큼 연결하기

  • 한 문자열에서 n개의 문자만 가져와 다른 문자열에 연결합니다.
  • 대상 문자열의 길이는 원본 문자열보다 커야 합니다.
  • 연결 결과는 대상 문자열에 저장됩니다.

문법

strncat (대상 문자열, 원본 문자열, n);

예제

#include <string.h>
main (){
    char a [30] = "Hello";
    char b [20] = "Good Morning";
    clrscr ();
    strncat (a,b,4);
    a [9] = '\0';
    printf("concatenated string = %s", a);
    getch ();
}

실행 결과

Concatenated string = Hello Good.

b 문자열에서 앞의 4글자("Good")만 a 문자열 뒤에 붙여진 것을 확인할 수 있습니다.

6. strcmp() 함수 – 문자열 비교하기

  • 두 개의 문자열을 비교합니다.
  • 두 문자열에서 처음으로 일치하지 않는 문자 두 개의 ASCII 코드 차이값을 반환합니다.

문법 및 반환값 의미

int strcmp (문자열1, 문자열2);
// 차이가 0이면 → 문자열1 == 문자열2
// 차이가 양수면 → 문자열1 > 문자열2
// 차이가 음수면 → 문자열1 < 문자열2

예제

#include<stdio.h>
#include<string.h>
int main (){
    char a[50], b [50];
    int d;
    printf ("Enter 2 strings:");
    scanf ("%s %s", a,b);
    d = strcmp(a,b);
    if (d==0){
        printf("%s is (alphabetically) equal to %s", a,b);
    }else if (d>0){
        printf("%s is (alphabetically) greater than %s",a,b);
    }else if (d<0){
        printf("%s is (alphabetically) less than %s", a,b);
    }
}

실행 결과

Enter 2 strings:apple ball
apple is (alphabetically) less than ball

'a'가 'b'보다 ASCII 값이 작으므로 "apple"이 사전순으로 앞선다는 결과가 출력됩니다.

7. strncmp() 함수 – 앞의 n개 문자 비교하기

이 함수는 두 문자열의 앞에서부터 n개의 문자만 비교할 때 사용합니다.

문법

strncmp (문자열1, 문자열2, n)

예제

char a[10] = "the";
char b[10] = "there";
strncmp (a,b,4);
→ 출력: 두 문자열은 같음

a 문자열은 "the\0"이므로 네 번째 문자에서 널 문자('\0')끼리 비교하게 되어 두 문자열이 같다고 판단됩니다.

8. strrev() 함수 – 문자열 뒤집기

  • 문자열의 순서를 거꾸로 뒤집습니다.
  • 뒤집힌 결과는 같은 문자열 변수에 저장됩니다.

문법

strrev (문자열)

예제

#include<stdio.h>
main (){
    char a[50] ;
    clrscr();
    printf ("enter a string");
    gets (a);
    strrev (a);
    printf("reversed string = %s",a)
    getch ();
}

실행 결과

enter a string Hello
reversed string = olleH

참고로 strrev() 함수는 표준 C 표준 라이브러리에는 포함되어 있지 않으며, 일부 컴파일러(Turbo C 등)에서만 제공되는 확장 함수입니다.

9. strstr() 함수 – 부분 문자열 검색하기

  • 주어진 부분 문자열이 메인 문자열 안에 존재하는지 검색합니다.
  • 찾으면 s1 내에서 s2가 처음 나타나는 위치의 포인터를 반환하고, 찾지 못하면 NULL을 반환합니다.

문법

strstr(메인 문자열, 부분 문자열);

예제

#include<stdio.h>
void main(){
    char a[30],b[30];
    char *found;
    printf("Enter a string:\t");
    gets(a);
    printf("Enter the string to be searched for:\t");
    gets(b);
    found=strstr(a,b);
    if(found)
        printf("%s is found in %s in %d position",b,a,found-a);
    else
        printf("-1 since the string is not found");
    getch();
}

실행 결과

Enter a string: how are you
Enter the string to be searched for: you
you is found in 8 position

포인터 연산 found-a를 통해 부분 문자열이 시작되는 인덱스 위치(8번째)를 계산하여 출력합니다.

마무리

C 언어의 string.h 라이브러리는 문자열 처리에 필요한 필수적인 함수들을 제공합니다. 각 함수의 인자 순서와 반환값의 의미를 정확히 이해하고 있으면, 문자열 복사·연결·비교·검색 등 다양한 작업을 효율적으로 수행할 수 있습니다. 특히 strcpy()와 strcat() 사용 시에는 대상 버퍼의 크기를 항상 확인해야 버퍼 오버플로우를 예방할 수 있다는 점을 기억하세요.