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() 사용 시에는 대상 버퍼의 크기를 항상 확인해야 버퍼 오버플로우를 예방할 수 있다는 점을 기억하세요.